| 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/* |