Building Thunderbird

This document currently supplements Building Thunderbird on DTN.

Additional Thunderbird configure flags

OpenPGP support

Thunderbird’s OpenPGP support is provided by RNP. There are several configure options that can be added to mozconfig to control how it is built.

  • –with-system-librnp

    Use system RNP (librnp) for OpenPGP support.

    This option will not build the librnp shared library at all. In order to provide OpenPGP support, librnp must be installed as a system package (RPM, DEB) and located where the dynamic loader will find it or copied separately into Thunderbird’s application directory.

  • –with-system-jsonc

    Use system JSON-C for librnp (located with pkgconfig)

    Build librnp from the in-tree sources, but link with a system-installed libjson-c. Build flags are determined with Pkg-config/pkgconf.

  • –with-system-bz2[=prefix]

    Use system Bzip2 for librnp (pkgconfig/given prefix)

    Build librnp from in-tree sources, link with a system libbz2. This option does accept a prefix path (such as –with-system-bz2=/usr/local). (Bzip2 itself does not provide a pkgconfig file. Some Linux distributions include their own so the build system will look for one.)

  • –with-system-zlib

    Link librnp to a system zlib. Pkgconfig only.

  • –with-librnp-backend=(botan|openssl)

    “openssl” is only supported when targeting Linux.

    This option allows building librnp with the OpenSSL backend. When not provided, it defaults to “botan”.

    When set to “openssl”, OpenSSL will be located via Pkgconfig.

  • –with-system-botan

    Link librnp to a system libbotan.

    Pkgconfig only. Note that it is not necessary to also set “–with-librnp-backend=botan”.

  • –with-openssl=prefix (Linux only)

    Used with “–with-librnp-backend=openssl” to use OpenSSL installed at “prefix” instead of one provided by Pkgconfig. Ex: –with-openssl=/usr/openssl-3

OpenSSL notes:

Only Linux targets are supported.

OpenSSL 1.1.1 and OpenSSL 3.0.x are supported. The version is checked during configure as RNP has slightly different code paths for 3.x.

The OpenSSL backend has some limitations compared to Botan. The following features are disabled: TWOFISH, BRAINPOOL

Branding

Thunderbird has multiple sets of “branding” that are used to hold channel-specific things such as:

  • Logos and other iconography

  • Product names (eg: “Mozilla Thunderbird”, “Mozilla Thunderbird Beta”)

  • Channel-specific preferences (eg: app.update.interval)

Brandings are stored in the branding subdirectory and map to builds as follows:

  • “thunderbird” is used for Release builds

  • “tb_beta” is used for Beta builds

  • “nightly” is used for Nightly and unofficial builds

When building with official branding[1], the appropriate branding directory will be set automatically based on:

  • If --enable-update-channel is set to “release” or “beta”, branding is set to “thunderbird” or “tb_beta” respectively.

  • If --enable-update-channel is unset (MOZ_UPDATE_CHANNEL=“default”), branding is determined by the content of version_display.txt.

    • If a “beta” version is found, based on the version ending in “bn”, “tb_beta” branding is used.

    • If an “alpha” version is found, ending in “a1”, “nightly” branding is used.

    • Otherwise “thunderbird” branding is used.

  • In the event the above does not work out, branding will default to “nightly”.

Verifying

To save some time, after running mach configure, view config.status, found in the build objdir. “MOZ_BRANDING_DIRECTORY” will refer to the actual branding directory being used, “MOZ_OFFICIAL_BRANDING” will be “1” if official branding is being used, and “THUNDERBIRD_OFFICIAL_BRANDING” will be set to what configure auto-detection found.

“THUNDERBIRD_OFFICIAL_BRANDING” is only used when the official branding build flag is set[1].

[1] - This flag is intentionally undocumented due to trademark and distribution requirements. See the policy.