Brotli provides a general-purpose lossless compression algorithm that compresses data using a combination of a modern variant of the LZ77 algorithm, Huffman coding and 2nd order context modeling. Its libraries are particularly used for WOFF2 fonts on webpages.
![[Note]](../images/note.png) 
          Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.
Download (HTTP): https://github.com/google/brotli/archive/v1.2.0/brotli-1.2.0.tar.gz
Download MD5 sum: 8fbfae9a5ecbc278ae7f761ecb6d1285
Download size: 632 KB
Estimated disk space required: 33 MB (with python3 bindings)
Estimated build time: 0.3 SBU (with python3 bindings; parallelism=4)
pytest-8.4.2 (for testing Python3 bindings)
Install brotli by running the following commands:
mkdir build &&
cd    build &&
cmake -D CMAKE_INSTALL_PREFIX=/usr \
      -D CMAKE_BUILD_TYPE=Release  \
      -G Ninja .. &&
ninja
        To test the results, issue: ninja test.
          Now, as the root user:
        
ninja install
If desired, build the Python3 bindings:
cd .. &&
sed -e '/libraries +=/s/=.*/= [required_system_library[3:]]/' \
    -e '/package_configuration/d'                             \
    -e '/pkgconfig/d'                                         \
    -i setup.py                                               &&
USE_SYSTEM_BROTLI=1 \
pip3 wheel -w dist --no-build-isolation --no-deps --no-cache-dir $PWD
        
          Install the Python3 bindings as
          the root user:
        
pip3 install --no-index --find-links dist --no-user Brotli
To test the Python3 binding, issue: pytest.
          sed ... -i setup.py:
          Allow building the Python3 binding
          with USE_SYSTEM_BROTLI=1 but without the
          Python 3 pkgconfig module (that BLFS does not provide) installed.
        
          USE_SYSTEM_BROTLI=1: Stop setup.py from rebuilding the entire package all
          over again, use the already installed libraries for the
          Python3 binding instead.