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

Contibuting to Buildroot
========================

If you want to contribute to Buildroot, you will need a git view of
the project. Refer to xref:getting-buildroot[] to get it.

Currently, the mailing list is the central place for contribution.
If you have not already subscribed to it, then refer to
xref:mailing-list-subscribe[].

Recently, a web interface is also used to manage patches sent to the
mailing list, see xref:patchwork[].

[NOTE]
_Please, do not attach patches to bugs, send them to the mailing list
instead_ (see xref:submitting-patches[]).

[[submitting-patches]]
Submitting patches
------------------

When your changes are done, and committed in your local git view,
_rebase_ your development branch on top of the upstream tree before
generating the patch set. To do so, run:

---------------------
 $ git fetch --all --tags
 $ git rebase origin/master
---------------------

Here, you are ready to generate then submit your patch set.

To generate it, run:

---------------------
 $ git format-patch -M -n -s -o outgoing origin/master
---------------------

This will generate patch files in the +outgoing+ subdirectory,
automatically adding the +signed-off-by+ line.

If you want to present the whole patch set in a separate mail, add
+--cover-letter+ to the previous command line (+man git-format-patch+
for further information).

Once patch files are generated, you can review/edit the commit message
before submitting them using your favorite text editor.

Lastly, send/submit your patch set to the Buildroot mailing list:

---------------------
 $ git send-email --to buildroot@busybox.net outgoing/*
---------------------

Note that +git+ should be configured to use your mail account.
To configure +git+, see +man git-send-email+ or google it.

Make sure posted *patches are not line-wrapped*, otherwise they cannot
easily be applied. In such a case, fix your e-mail client, or better,
use +git send-email+ to send your patches.

Reviewing/Testing patches
-------------------------

In the review process, do not hesitate to respond to patch submissions
for remarks, suggestions or anything that will help everyone to
understand the patches and make them better.

Some tags are used to help following the state of any patch posted on
the mailing-list:

Acked-by:: Indicates that the patch can be committed.

Tested-by:: Indicates that the patch has been tested. It is useful
  but not necessary to add a comment about what has been tested.

Autobuild
---------

The Buildroot community is currently setting up automatic builds in
order to test more and more configurations. All build results are
available at http://autobuild.buildroot.org[]

A good way to contribute is by fixing broken builds.

In the commit message of a patch fixing an _autobuild_, add a
reference to the _build result directory_ (the +dir+ link in the _data
column_):

---------------------
Fixes http://autobuild.buildroot.org/results/51000a9d4656afe9e0ea6f07b9f8ed374c2e4069
---------------------

[[reporting-bugs]]
Reporting issues/bugs, get help
-------------------------------

Before reporting any issue, please check
xref:mailing-list-subscribe[the mailing list archive] in case someone has
already reported and fixed a similar problem.

However you choose to report bugs or get help,
xref:bugtracker[opening a bug] or
xref:mailing-list-subscribe[send a mail to the mailing list], there are
a number of details to provide in order to help people reproduce and
find a solution to the issue.

Try to think as if you were trying to help someone else; in
that case, what would you need?

Here is a short list of details to provide in such case:

* host machine (OS/release)
* version of Buildroot
* target for which the build fails
* package(s) which the build fails
* the command that fails and its output
* any information you think that may be relevant

Additionnally, your can add the +.config+ file.

If some of these details are too large, do not hesitate to use a
pastebin service (see http://www.similarsitesearch.com/alternatives-to/pastebin.com[]).
