summaryrefslogtreecommitdiffstats
path: root/docs/manual/patch-policy.txt
blob: 551ea1288f2095ce2a8e61ddf188aa2a246b61aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// -*- mode:doc; -*-

[[patch-policy]]

Patch Policy
------------

While integrating a new package or updating an existing one, it may be
necessary to patch the source of the software to get it built within
Buildroot.

Buildroot offers an infrastructure to automatically handle this during
the builds. It support several ways of applying patch sets:

Provinding patches
~~~~~~~~~~~~~~~~~~

Additionnal tarball
^^^^^^^^^^^^^^^^^^^

If there needs to apply a patch set available as a tarball and
downloadable, then add the patch tarball to the +<packagename>_PATCH+
variable.

Note that the patch tarballs are downloaded from the same site as the
sources.

Within Buildroot
^^^^^^^^^^^^^^^^

Most of the patches are provided within Buildroot, in the package
directory, because they aim to fix cross-compilation, +libc+ support,
or whatever the reason is.

These patch files should have the extension +*.patch+.

A +series+ file, like +quilt+ uses it, may also be added in the
package directory. In that case, the +series+ file defines the patch
application order.

How patches are applied
~~~~~~~~~~~~~~~~~~~~~~~

. Run the +<packagename>_PRE_PATCH_HOOKS+ commands if defined;

. Cleanup the build directory from any existing +*.rej+ files;

. If +<packagename>_PATCH+ is defined, then patches from these
  tarballs are applied;

. If there are some +*.patch+ files in the package directory or in the
  a package subdirectory named +<packagename>-<packageversion>+, then:
+
* If a +series+ file exists in the package directory, then patches are
  applied according to the +series+ file;
+
* Otherwise, patch files matching `<packagename>-*.patch` or
  `<packagename>-*.patch.<arch>` (where +<arch>+ is the architecture
  name) are applied following the +ls+ command order.

. Run the +<packagename>_POST_PATCH_HOOKS+ commands if defined.

If something goes wrong in the steps _3_ or _4_, then the build fails.

Format and licensing of the package patches
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Patches are released under the same license the software that is
modified.

A message explaining what does the patch and why should be add in the
patch's header.

You should add a +signed-off-by+ statement in the header of the each
patch to help keeping track of the changes.

If the software is under versionning, it is recommended to use the SCM
software to generate the patch set.

Otherwise, concatenate the header with the output of the
+diff -purN source.c.orig source.c+ command.

At the end, the patch should look like:

---------------
configure.ac: add C++ support test

signed-off-by John Doe <john.doe@noname.org>

--- configure.ac.orig
+++ configure.ac
@@ -40,2 +40,12 @@

AC_PROG_MAKE_SET
+
+AC_CACHE_CHECK([whether the C++ compiler works],
+               [rw_cv_prog_cxx_works],
+               [AC_LANG_PUSH([C++])
+                AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
+                               [rw_cv_prog_cxx_works=yes],
+                               [rw_cv_prog_cxx_works=no])
+                AC_LANG_POP([C++])])
+
+AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"])
---------------

Integrating patches found on the Web
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

When integrating a patch whom you are not the author, you have to add
few things in the header of the patch itself.

Depending on whether the patch has been pick-up from the project
repository itself, or from somewhere on the web, add one of the
following tags:

---------------
Backported from: <some commit id>
---------------

or

---------------
Fetch from: <some url>
---------------

It is also possible to add few words about the changes that may have
been necessary if any.