How To Contribute To The GNU Binutils
Add intro here...
Individuals with "write after approval" have the ability to check in changes, but they must get approval for each change from someone in one of the above lists (blanket write or maintainers).
Fixes for obvious mistakes do not need approval, and can be checked in right away, but the patch should still be sent to the binutils list. The definition of obvious is a bit hazy, and if you are not sure, then you should seek approval first. Obvious fixes include fixes for spelling mistakes, blatantly incorrect code (where the correct code is also blatantly obvious), and so on. Obvious fixes should always be small, the larger they are, the more likely it is that they contain some un-obvious side effect or consequence.
Obvious fixes should not be ''legally significant''.
Patches and Copyright
If a patch is non-obvious, its copyright must be considered. There are two ways to handle this. The first is to assign the copyright of the FSF. This ensures that if problems with the authorship of the patch arise, the FSF will be able to deal with them.
The list of already assigned copyrights can be obtained from fencepost.gnu.org in the file: /gd/gnuorg/copyright.list.
New copyright assignments can be obtained by completing one of these forms and sending it off to the FSF.
The alternative is to sign off the contribution by agreeing to the Developer's Certificate of Origin (version 1.1 or later) and adding a line to the end of the contribution that looks something like this:
Signed-off-by: Random J Developer <firstname.lastname@example.org>
Note - when possible we prefer to have a copyright assignment in place as this means that, if necessary, we can update the license under which the code is distributed. With DCO, the license covering a piece of code can only be updated if the all of the DCO contributors agree.
There is a pre-commit checking system for patches sent to the binutils mailing list. This can help detect problems before they are checked in.
If a patch is approved for check in to the mainline sources, it can also be checked into the current release branch. Normally however only bug fixes should be applied to the branch. New features, new ports, etc, should be restricted to the mainline. (Otherwise the burden of maintaining the branch in sync with the mainline becomes too great). If you are uncertain as to whether a patch is appropriate for the branch, ask the branch maintainer.
In general patches to any of the binutils testsuites should be considered generic and sent to the binutils mailing list for approval. Patches to target specific tests are the responsibility the relevant port maintainer(s), and can be approved/checked in by them. Other testsuite patches need the approval of a blanket-write-priveleges person.
When adding a new feature to the binutils it is always a good idea to include one or more new tests to check the behaviour of the feature and to make sure that it continues to work in the future. The Binutils use the expect, tcl and dejagnu tools in their testsuite harnesses and writing a new test using them can be daunting at first. There are a couple of online documents that can help, including the Writing a Test Case section of the DejaGNU manual and An introduction to writing DejaGNU tests but as is often the case, the easiest way is to copy and already existing test and modify it for the new circumstances.
Patches to the top level configure files (config.sub & config.guess) are not the domain of the binutils project and they cannot be approved by the binutils group. Instead they should be submitted to the config maintainer at: email@example.com
Anyone with at least write-after-approval access may create a branch to use for their own development purposes. In keeping with FSF policies, all patches applied to such a branch must come from people with appropriate copyright assignments on file. All legal requirements that would apply to any other contribution apply equally to contributions on a branch.
Before creating the branch, you should select a name for the branch of the form:
where "org" is the initials of your organization, or your own initials if you are acting as an individual. For example, for a branch created by The GNUDist Company, "tgc" would be an appropriate choice for "org". It's up to each organization to select an appropriate choice for "name"; some organizations may use more structure than others, so "name" may contain additional hyphens.
Suppose that The GNUDist Company was creating a branch to develop a port of Binutils to the FullMonty processor. Then, an appropriate choice of branch name would be:
A date stamp is not required as part of the name field, but some organizations like to have one. If you do include the date, you should follow these rules:
1. The date should be the date that the branch was created.
2. The date should be numerical and in the form YYYYMMDD.
would be appropriate if the branch was created on January 1st, 2005.
Having selected the branch name, create the branch as follows:
1. Check out binutils, so that you have a git checkout corresponding
- to the initial state of your branch.
2. Create a tag:
git tag binutils-<org>-<name>-branchpoint
- That tag will allow you, and others, to easily determine what's changed on the branch relative to the initial state.
3. Create and push the branch:
git checkout -b binutils-<org>-<name>-branch git push origin HEAD
4. Document the branch:
- Add a description of the branch to binutils/BRANCHES, and check that file in. All branch descriptions should be added to the HEAD revision of the file; it doesn't help to modify binutils/BRANCHES on a branch!
Please do not commit any patches to a branch you did not create without the explicit permission of the person who created the branch.