patch-policy.txt 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. // -*- mode:doc; -*-
  2. // vim: set syntax=asciidoc:
  3. [[patch-policy]]
  4. Patching a package
  5. ------------------
  6. While integrating a new package or updating an existing one, it may be
  7. necessary to patch the source of the software to get it cross-built within
  8. Buildroot.
  9. Buildroot offers an infrastructure to automatically handle this during
  10. the builds. It supports two ways of applying patch sets: downloaded patches
  11. and patches supplied within buildroot.
  12. Providing patches
  13. ~~~~~~~~~~~~~~~~~
  14. Downloaded
  15. ^^^^^^^^^^
  16. If it is necessary to apply a patch that is available for download, then it
  17. to the +<packagename>_PATCH+ variable. It is downloaded from the same site
  18. as the package itself. It can be a single patch, or a tarball containing a
  19. patch series.
  20. This method is typically used for packages from Debian.
  21. Within Buildroot
  22. ^^^^^^^^^^^^^^^^
  23. Most patches are provided within Buildroot, in the package
  24. directory; these typically aim to fix cross-compilation, libc support,
  25. or other such issues.
  26. These patch files should be named +<packagename>-<number>-<description>.patch+.
  27. A +series+ file, as used by +quilt+, may also be added in the
  28. package directory. In that case, the +series+ file defines the patch
  29. application order.
  30. .Notes
  31. - The patch files coming with Buildroot should not contain any package version
  32. reference in their filename.
  33. - The field +<number>+ in the patch file name refers to the 'apply order'.
  34. How patches are applied
  35. ~~~~~~~~~~~~~~~~~~~~~~~
  36. . Run the +<packagename>_PRE_PATCH_HOOKS+ commands if defined;
  37. . Cleanup the build directory, removing any existing +*.rej+ files;
  38. . If +<packagename>_PATCH+ is defined, then patches from these
  39. tarballs are applied;
  40. . If there are some +*.patch+ files in the package directory or in the
  41. a package subdirectory named +<packagename>-<packageversion>+, then:
  42. +
  43. * If a +series+ file exists in the package directory, then patches are
  44. applied according to the +series+ file;
  45. +
  46. * Otherwise, patch files matching +<packagename>-*.patch+
  47. are applied in alphabetical order.
  48. So, to ensure they are applied in the right order, it is hightly
  49. recommended to named the patch files like this:
  50. +<packagename>-<number>-<description>.patch+, where +<number>+
  51. refers to the 'apply order'.
  52. . Run the +<packagename>_POST_PATCH_HOOKS+ commands if defined.
  53. If something goes wrong in the steps _3_ or _4_, then the build fails.
  54. Format and licensing of the package patches
  55. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  56. Patches are released under the same license as the software that is
  57. modified.
  58. A message explaining what the patch does, and why it is needed, should
  59. be added in the header commentary of the patch.
  60. You should add a +Signed-off-by+ statement in the header of the each
  61. patch to help with keeping track of the changes and to certify that the
  62. patch is released under the same license as the software that is modified.
  63. If the software is under version control, it is recommended to use the
  64. upstream SCM software to generate the patch set.
  65. Otherwise, concatenate the header with the output of the
  66. +diff -purN package-version.orig/ package-version/+ command.
  67. At the end, the patch should look like:
  68. ---------------
  69. configure.ac: add C++ support test
  70. signed-off-by John Doe <john.doe@noname.org>
  71. --- configure.ac.orig
  72. +++ configure.ac
  73. @@ -40,2 +40,12 @@
  74. AC_PROG_MAKE_SET
  75. +
  76. +AC_CACHE_CHECK([whether the C++ compiler works],
  77. + [rw_cv_prog_cxx_works],
  78. + [AC_LANG_PUSH([C++])
  79. + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
  80. + [rw_cv_prog_cxx_works=yes],
  81. + [rw_cv_prog_cxx_works=no])
  82. + AC_LANG_POP([C++])])
  83. +
  84. +AM_CONDITIONAL([CXX_WORKS], [test "x$rw_cv_prog_cxx_works" = "xyes"])
  85. ---------------
  86. Integrating patches found on the Web
  87. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  88. When integrating a patch of which you are not the author, you have to
  89. add a few things in the header of the patch itself.
  90. Depending on whether the patch has been obtained from the project
  91. repository itself, or from somewhere on the web, add one of the
  92. following tags:
  93. ---------------
  94. Backported from: <some commit id>
  95. ---------------
  96. or
  97. ---------------
  98. Fetch from: <some url>
  99. ---------------
  100. It is also sensible to add a few words about any changes to the patch
  101. that may have been necessary.