Notes for Distributors
========================

This document has information for anyone who is packaging copies of Botan for
use by downstream developers, such as through a Linux distribution or other
package management system.

Recommended Options
------------------------

In most environments, zlib, bzip2, and sqlite are already installed, so there is
no reason to not include support for them in Botan as well. Build with options
``--with-zlib --with-bzip2 --with-sqlite3`` to enable these features.

Set Path to the System CA bundle
---------------------------------

Most Unix/Linux systems maintain a list of trusted CA certificates at some well
known path like ``/etc/ssl/certs/ca-certificates.crt`` or
``/etc/ssl/cert.pem``. Unfortunately the exact path varies between systems. Use
``--system-cert-bundle=PATH`` to set this path. If the option is not used,
``configure.py`` tries a list of known locations.

Set Distribution Info
------------------------

If your distribution of Botan involves creating library binaries, use the
configure.py flag ``--distribution-info=`` to set the version of your
packaging. For example Foonix OS might distribute its 4th revision of the
package for Botan 2.1.3 using ``--distribution-info='Foonix 2.1.3-4'``. The
string is completely free-form, since it depends on how the distribution numbers
releases and packages.

Any value set with ``--distribution-info`` flag will be included in the version
string, and can read through the ``BOTAN_DISTRIBUTION_INFO`` macro.

CMake Integration
-----------------

Starting in Botan 3.3.0, we ship ``botan-config.cmake`` files. While this config
file is somewhat relocatable, it assumes that the installation directory layout
as generated by ``make install`` remains unchanged after installation. If your
distribution changes the directory layout of the installed files you might want
to either adapt the final ``botan-config.cmake`` file accordingly or leave it
out entirely using ``--without-cmake-config``.

Note that you may change the installed location of these files using the
``--cmakeconfigdir`` option at configure time. However, the location must be a
subdirectory of the install prefix.

Please don't hesitate to give your feedback on this new feature by opening a
ticket on the upstream GitHub.

Minimize Distribution Patches
------------------------------

We (Botan upstream) *strongly* prefer that downstream distributions maintain no
long-term patches against Botan. Even if it is a build problem which probably
only affects your environment, please open an issue on github and include the
patch you are using. Perhaps the issue does affect other users, and even if not
it would be better for everyone if the library were improved so it were not
necessary for the patch to be created in the first place. For example, having to
modify or remove a build data file, or edit the makefile after generation,
suggests an area where the build system is insufficiently flexible.

Obviously nothing in the BSD-2 license prevents you from distributing patches or
modified versions of Botan however you please. But long term patches by
downstream distributors have a tendency to bitrot and sometimes even result in
security problems (such as in the Debian OpenSSL RNG fiasco) because the patches
are never reviewed by the library developers. So we try to discourage them, and
work to ensure they are never necessary.
