File.........: 7 - Contributing to crosstool-NG.txt
Copyright....: (C) 2010 Yann E. MORIN <yann.morin.1998@anciens.enib.fr>
License......: Creative Commons Attribution Share Alike (CC-by-sa), v2.5


Contributing to crosstool-NG  /
_____________________________/


Sending a bug report |
---------------------+

If you need to send a bug report, please send a mail with subject
prefixed with "[CT_NG]" with to following destinations:
    TO: yann.morin.1998 (at) anciens.enib.fr
    CC: crossgcc (at) sourceware.org


Sending patches |
----------------+

If you want to enhance crosstool-NG, there's a to-do list in the TODO file.

When updating a package, please include the category and component in the
start of the description. For example:
    cc/gcc: update to the Linaro 2011.09 release

Here is the (mostly-complete) list of categories and components:

    Categories  | Components
    ------------+-------------------------------------------------------
    arch        | alpha, arm, mips, powerpc...
    cc          | gcc
    binutils    | binutils, elf2flt, sstrip
    libc        | eglibc, uClibc, glibc, newlib, mingw, none
    kernel      | linux, mingw32, bare-metal
    debug       | dmalloc, duma, gdb, ltrace, strace
    complibs    | gmp, mpfr, ppl, cloog, mpc, libelf
    comptools   | make, m4, autoconf, automake, libtool
    ------------+-------------------------------------------------------
                | The following categories have no component-part:
    samples     | when adding/updating/removing a sample
    kconfig     | for stuff in the kconfig/ dir
    docs        | for changes to the documentation
    configure   | for changes to ./configure and/or Makefile.in
    config      | for stuff in config/ not covered above
    scripts     | for stuff in scripts/ not covered above


Patches should come with the appropriate SoB line. A SoB line is typically
something like:
   Signed-off-by: John DOE <john.doe@somewhere.net>

The SoB line is clearly described in Documentation/SubmittingPatches , section
12, of your favourite Linux kernel source tree.

Add the following to your ~/.hgrc to make Mercurial check for the SoB
line when committing:
    [hooks]
    pretxncommit.signoff = hg log --template '{desc}\n' -r $HG_NODE \
        | grep -qi '^signed-off-by:'

You can also add any of the following lines if applicable:
    Acked-by:
    Tested-by:
    Reviewed-by:

For larger or more frequent contributions, mercurial should be used.
There is a nice, complete and step-by-step tutorial in section 'C'.
