1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
- Using Quilt in Your Workflow
- ****************************
- `Quilt <https://savannah.nongnu.org/projects/quilt>`__ is a powerful tool
- that allows you to capture source code changes without having a clean
- source tree. This section outlines the typical workflow you can use to
- modify source code, test changes, and then preserve the changes in the
- form of a patch all using Quilt.
- .. note::
- With regard to preserving changes to source files, if you clean a
- recipe or have :ref:`ref-classes-rm-work` enabled, the
- :ref:`devtool workflow <sdk-manual/extensible:using \`\`devtool\`\` in your sdk workflow>`
- as described in the Yocto Project Application Development and the
- Extensible Software Development Kit (eSDK) manual is a safer
- development flow than the flow that uses Quilt.
- Follow these general steps:
- #. *Find the Source Code:* Temporary source code used by the
- OpenEmbedded build system is kept in the :term:`Build Directory`. See the
- ":ref:`dev-manual/temporary-source-code:finding temporary source code`" section to
- learn how to locate the directory that has the temporary source code for a
- particular package.
- #. *Change Your Working Directory:* You need to be in the directory that
- has the temporary source code. That directory is defined by the
- :term:`S` variable.
- #. *Create a New Patch:* Before modifying source code, you need to
- create a new patch. To create a new patch file, use ``quilt new`` as
- below::
- $ quilt new my_changes.patch
- #. *Notify Quilt and Add Files:* After creating the patch, you need to
- notify Quilt about the files you plan to edit. You notify Quilt by
- adding the files to the patch you just created::
- $ quilt add file1.c file2.c file3.c
- #. *Edit the Files:* Make your changes in the source code to the files
- you added to the patch.
- #. *Test Your Changes:* Once you have modified the source code, the
- easiest way to test your changes is by calling the :ref:`ref-tasks-compile`
- task as shown in the following example::
- $ bitbake -c compile -f package
- The ``-f`` or ``--force`` option forces the specified task to
- execute. If you find problems with your code, you can just keep
- editing and re-testing iteratively until things work as expected.
- .. note::
- All the modifications you make to the temporary source code disappear
- once you run the :ref:`ref-tasks-clean` or :ref:`ref-tasks-cleanall`
- tasks using BitBake (i.e. ``bitbake -c clean package`` and
- ``bitbake -c cleanall package``). Modifications will also disappear if
- you use the :ref:`ref-classes-rm-work` feature as described in
- the ":ref:`dev-manual/disk-space:conserving disk space during builds`"
- section.
- #. *Generate the Patch:* Once your changes work as expected, you need to
- use Quilt to generate the final patch that contains all your
- modifications::
- $ quilt refresh
- At this point, the
- ``my_changes.patch`` file has all your edits made to the ``file1.c``,
- ``file2.c``, and ``file3.c`` files.
- You can find the resulting patch file in the ``patches/``
- subdirectory of the source (:term:`S`) directory.
- #. *Copy the Patch File:* For simplicity, copy the patch file into a
- directory named ``files``, which you can create in the same directory
- that holds the recipe (``.bb``) file or the append (``.bbappend``)
- file. Placing the patch here guarantees that the OpenEmbedded build
- system will find the patch. Next, add the patch into the :term:`SRC_URI`
- of the recipe. Here is an example::
- SRC_URI += "file://my_changes.patch"
|