mirror of
https://git.kernel.org/pub/scm/bluetooth/bluez.git
synced 2024-12-15 23:14:38 +08:00
4364085aad
Make use of -f option in the instruction of how to run bluetoothd from the source tree since that doesn't require installing the main.conf when testing new options.
158 lines
5.5 KiB
Plaintext
158 lines
5.5 KiB
Plaintext
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. All modern
|
|
distributions should default to the latest version, but it seems that
|
|
Debian's default is still an earlier version:
|
|
|
|
Check version
|
|
# dpkg -l '*automake*'
|
|
|
|
Install new version
|
|
# apt-get install automake1.10
|
|
# update-alternatives --config automake
|
|
|
|
|
|
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/*
|