Contributing to the Meson build system

There are two simple ways to submit your patches. The preferred way is
to send a github pull request. Small changes can also be sent as
patches as emails to the Meson mailing list.


Python Coding style

Meson follows the basic Python coding style. Additional rules are the
following:

- indent 4 spaces, no tabs ever
- indent meson.build files with two spaces
- try to keep the code as simple as possible
- contact the mailing list before embarking on large scale projects
  to avoid wasted effort
- all new features must come with a test (or several if it is
  a big feature)

Meson uses Flake8 for style guide enforcement. The Flake8 options for
the project are contained in setup.cfg.

To run Flake8 on your local clone of Meson:

 $ python3 -m pip install flake8
 $ cd meson
 $ flake8

C/C++ coding style

Meson has a bunch of test code in several languages. The rules for
those are simple.

- indent 4 spaces, no tabs ever
- brace always on the same line as if/for/else/function definition


External dependencies

The goal of Meson is to be as easily usable as possible. The user
experience should be "get Python3 and Ninja, run", even on
Windows. Unfortunately this means that we can't have dependencies on
projects outside of Python's standard library. This applies only to
core functionality, though. For additional helper programs etc the use
of external dependencies may be ok. If you feel that you are dealing
with this kind of case, please raise the issue on the mailing list
first.


What not to contribute?

There are a few things that people seem to want to add to Meson but which
are not there by design and will not be added either.

The first one is defining your own functions or a generalized for loop.
These are bad because they would make Meson's DSL Turing complete. The
second feature is a Make backend.

The FAQ has specific information why these two features will not be
added to Meson: http://mesonbuild.com/FAQ.html

Merge requests adding either of these two features will be automatically
rejected. Please save everyone's time (especially your own) and don't start
working on these features.


Do I need to sign a CLA?

No. All contributions are welcome.
