Hacking on BlueZ
****************

Build tools requirements
========================

When building and testing directly from the repository it is important to
have at least automake version 1.10 or later installed.


Working with the source code repository
=======================================

The repository contains two extra scripts that accomplish the bootstrap
process. One is called "bootstrap" which is the basic scripts that uses the
autotools scripts to create the needed files for building and installing.
It makes sure to call the right programs depending on the usage of shared or
static libraries or translations etc.

The second program is called "bootstrap-configure". This program will make
sure to properly clean the repository, call the "bootstrap" script and then
call configure with proper settings for development. It will use the best
options and pass them over to configure. These options normally include
the enabling the maintainer mode and the debugging features.

So while in a normal source project the call "./configure ..." is used to
configure the project with its settings like prefix and extra options. In
case of bare repositories call "./bootstrap-configure" and it will bootstrap
the repository and calls configure with all the correct options to make
development easier.

In case of preparing for a release with "make distcheck", don't use
bootstrap-configure since it could export development specific settings.

So the normal steps to checkout, build and install such a repository is
like this:

  Checkout repository
    # git clone git://git.kernel.org/pub/scm/bluetooth/bluez.git
    # cd bluez

  Configure and build
    # ./bootstrap-configure
    # make

  Configure and build with cgcc (Sparse)
    # ./bootstrap-configure CC=cgcc
    # make

  Run unit tests
    # make check

  Check installation
    # make install DESTDIR=$PWD/x
    # find x
    # rm -rf x

  Check distribution
    # make distcheck

  Final installation
    # sudo make install

  Remove autogenerated files
    # make maintainer-clean


Running from within the source code repository
==============================================

When using "./configure --enable-maintainer-mode" the automake scripts will
use the plugins directly from within the repository. This removes the need
to use "make install" when testing "bluetoothd". The "bootstrap-configure"
automatically includes this option.

  Copy configuration file which specifies the required security policies
    # sudo cp ./src/bluetooth.conf /etc/dbus-1/system.d/

  Run daemon in foreground with debugging
    # sudo ./src/bluetoothd -n -d -f ./src/main.conf

  Run daemon with valgrind
   # sudo valgrind --trace-children=yes --track-origins=yes --track-fds=yes \
   --show-possibly-lost=no --leak-check=full --suppressions=./tools/valgrind.supp \
   ./src/bluetoothd -n -d -f ./src/main.conf

For production installations or distribution packaging it is important that
the "--enable-maintainer-mode" option is NOT used.

Note multiple arguments to -d can be specified, colon, comma or space
separated. The arguments are relative source code filenames for which
debugging output should be enabled; output shell-style globs are
accepted (e.g.: 'plugins/*:src/main.c').

Submitting patches
==================

If you fixed a bug or you want to add support for something, patches are
welcome! In order to ease the inclusion of your patch, it's important to follow
some rules, otherwise it will likely be rejected by maintainers.

Make sure the author name and email are set properly:

  # git config --global user.name <name>
  # git config --global user.email <email>

The preferred way to send patches is by email, using git send-email:

  # git config --global sendemail.smtpencryption <tls>
  # git config --global sendemail.smtpserver <smtp.gmail.com>
  # git config --global sendemail.smtpuser <yourname@gmail.com>
  # git config --global sendemail.smtpserverport <587>
  # git config sendemail.to linux-bluetooth@vger.kernel.org

BlueZ rules for submitting patches follow most of the rules used by Linux kernel
(https://www.kernel.org/doc/Documentation/SubmittingPatches) with some remarks:

1) Do *not* add "Signed-off-by" lines in your commit messages. BlueZ does not
use them, so including them is actually an error.

2) Be sure to follow the coding style rules of BlueZ. They are listed in
doc/coding-style.txt.

3) Split your patch according to the top-level directories. E.g.: if you added
a feature that touches files under 'include/', 'src/' and 'drivers/'
directories, split in three separated patches, taking care not to
break compilation.

4) Bug fixes should be sent first as they take priority over new features.

5) The commit message should follow 50/72 formatting which means the header
should be limited to 50 characters and the description should be wrapped at 72
characters except if it contains quoted information from debug tools like
backtraces, compiler errors, etc.

6) Prefix the email subject with [PATCH BlueZ]:

  # git config format.subjectprefix "PATCH BlueZ"

7) Add a cover letter when introducing a new feature explaning what problem
you're trying to solve:

  # git format-patch --cover-letter -M origin/master -o outgoing/
  # edit outgoing/0000-*

8) Submit:

  # git send-email outgoing/*
