[[toc ]]

[[meta title="Contributing to cwidget"]]

# Getting the development tree #

While you can always work from the distributed source (see
[[getting_cwidget|downloading]]), I recommend that you use the active
development tree to ensure that your changes are compatible with the
current state of cwidget.

The cwidget development tree is managed using the [git][] version
control system.  You can install git using your operating system's
utilities or by following the instructions on its [web page][git].
Once it is installed, issuing the command

[git]: <http://git-scm.com/>

>     git clone git://git.debian.org/git/cwidget/cwidget-upstream.git cwidget

will retrieve the latest version of the source and store it in a
directory named <q>`cwidget`</q>.  You can update this directory to
the latest source version by changing to it and issuing the folowing
command:

>     git pull

git is a fully distributed version control system.  This means that
once you have made some changes to your copy of the source code, you
can commit them by running

>     git add <file>

for each `<file>` that you have modified, then running

>     git commit

and typing a commit message.  In order to make it easier for us to
review your patches, I recommend making small, logically distinct
commits rather than checking in 50 changes at once.  If this means
that you have dead-ends in your change history, that's fine.

For more information on using git, see the [git documentation][].

[git documentation]: <http://git-scm.com/documentation>

# Sending patches #

Once you have committed some changes, you can automatically generate
emails containing your patches:

>     git pull && git format-patch origin

This command will generate one or more patches represnting your
changes relative to the upstream tree, writing the names of the files
to standard output:

>     daniel@alpaca:/tmp/cwidget$ git format-patch origin
>     0001-A-simple-test-commit-to-try-bundling.patch


Patches should be sent to cwidget-devel@lists.alioth.debian.org.  You
can use patches as email templates, for instance via

>     mutt -H 0001-A-simple-test-commit-to-try-bundling.patch cwidget-devel@lists.alioth.debian.org

, or you can just attach the patches themselves to your email.  Using
the patch as a template is preferred, but may not be easy or possible
in all mail readers.

# Compiling the development tree #

In addition to cwidget's normal
[[prerequisites|install#prerequisites]], you will need the following
additional pieces of software:

 * [autoconf][]
 * [automake][]
 * [libtool][]

[autoconf]: <http://www.gnu.org/software/autoconf/>
[automake]: <http://www.gnu.org/software/automake/>
[libtool]:  <http://www.gnu.org/software/libtool/>

These tools allow you to generate the build system of cwidget.  The
build system can be generated by running

>     sh ./autogen.sh

, which will create and run a configure script to build the Makefiles.
Once `autogen` is finished, you can just run

>     make

as usual to build the library.
