// -*- mode:doc -*- ;
// vim: set syntax=asciidoc:

=== Adding project-specific patches and hashes

[[customize-patches]]
==== Providing extra patches

It is sometimes useful to apply 'extra' patches to packages - on top of
those provided in Buildroot. This might be used to support custom
features in a project, for example, or when working on a new
architecture.

The +BR2_GLOBAL_PATCH_DIR+ configuration option can be used to specify
a space separated list of one or more directories containing package
patches.

For a specific version +<packageversion>+ of a specific package
+<packagename>+, patches are applied from +BR2_GLOBAL_PATCH_DIR+ as
follows:

. For every directory - +<global-patch-dir>+ - that exists in
  +BR2_GLOBAL_PATCH_DIR+, a +<package-patch-dir>+ will be determined as
  follows:
+
* +<global-patch-dir>/<packagename>/<packageversion>/+ if the
  directory exists.
+
* Otherwise, +<global-patch-dir>/<packagename>+ if the directory
  exists.

. Patches will then be applied from a +<package-patch-dir>+ as
  follows:
+
* If a +series+ file exists in the package directory, then patches are
  applied according to the +series+ file;
+
* Otherwise, patch files matching +*.patch+ are applied in
  alphabetical order.  So, to ensure they are applied in the right
  order, it is highly recommended to name the patch files like this:
  +<number>-<description>.patch+, where +<number>+ refers to the
  'apply order'.

For information about how patches are applied for a package, see
xref:patch-apply-order[]

The +BR2_GLOBAL_PATCH_DIR+ option is the preferred method for
specifying a custom patch directory for packages. It can be used to
specify a patch directory for any package in buildroot. It should also
be used in place of the custom patch directory options that are
available for packages such as U-Boot and Barebox. By doing this, it
will allow a user to manage their patches from one top-level
directory.

The exception to +BR2_GLOBAL_PATCH_DIR+ being the preferred method for
specifying custom patches is +BR2_LINUX_KERNEL_PATCH+.
+BR2_LINUX_KERNEL_PATCH+ should be used to specify kernel patches that
are available at a URL. *Note:* +BR2_LINUX_KERNEL_PATCH+ specifies kernel
patches that are applied after patches available in +BR2_GLOBAL_PATCH_DIR+,
as it is done from a post-patch hook of the Linux package.


[[customize-hashes]]
==== Providing extra hashes

Buildroot bundles a xref:adding-packages-hash[list of hashes] against
which it checks the integrity of the downloaded archives, or of those
it generates locally from VCS checkouts. However, it can only do so
for the known versions; for packages where it is possible to specify
a custom version (e.g. a custom version string, a remote tarball URL,
or a VCS repository location and changeset), Buildroot can't carry
hashes for those.

For users concerned with the integrity of such downloads, it is possible
to provide a list of hashes that Buildroot can use to check arbitrary
downloaded files. Those extra hashes are looked up similarly to the
extra patches (above); for each directory in +BR2_GLOBAL_PATCH_DIR+,
the first file to exist is used to check a package download:

* +<global-patch-dir>/<packagename>/<packageversion>/<packagename>.hash+
* +<global-patch-dir>/<packagename>/<packagename>.hash+

The +utils/add-custom-hashes+ script can be used to generate these files.
