Skip to content

Build

The default build compiles OpenSSL, APR, APR-util, httpd, and nghttp3 from the repository submodules. This is the supported path when system packages do not meet the required httpd module magic number.

git submodule update --init
git submodule update --init --recursive dependencies/nghttp3
cmake -B build
cmake --build build

Only nghttp3 needs its own submodule (lib/sfparse). Recursing everywhere also clones OpenSSL's eleven external-test submodules, which the build never uses.

The module is written to build/lib/mod_http3.so.

Requirements

The versions below are what the submodule build produces; supply your own with the WITH_* options only if they meet these minimums.

Dependency Minimum
OpenSSL 3.5.0 with QUIC support
Apache httpd MMN 20211221
APR 1.7.0
APR-util 1.6.0
nghttp3 1.18.0

Distribution-provided httpd packages usually have an older MMN and are rejected. Use the default source build or provide compatible custom prefixes.

QUIC engine

ENABLE_NGTCP2 decides which engines the module contains. The default needs nothing extra:

cmake -B build                              # OpenSSL's QUIC only (default)
cmake -B build -DENABLE_NGTCP2=ON           # both, ngtcp2 from the submodule

Enabling ngtcp2 also builds quic/third-party/ngtcp2, which needs the OpenSSL built alongside it; point WITH_NGTCP2 at a prefix to use one you already have. OpenSSL remains the TLS provider either way.

A build containing both picks one at start-up with H3QuicEngine; see architecture.

Custom Prefixes

git submodule update --init dependencies/nghttp3
cmake -B build \
    -DWITH_SSL=/opt/openssl \
    -DWITH_HTTPD=/opt/httpd \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTS=OFF
cmake --build build

Set WITH_APR and WITH_APU when APR and APR-util are not part of the httpd prefix. See the full installation reference for package builds and every CMake option.