Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
14188fa
TASK-001: Bump C++ standard floor to C++20
etr Apr 30, 2026
5288ecd
Merge TASK-001: Bump C++ standard floor to C++20
etr Apr 30, 2026
638c26a
Ignore .groundwork-plans/
etr Apr 30, 2026
c80fdff
TASK-002: Lock public/private header surface and inclusion gates
etr Apr 30, 2026
48a8835
Merge TASK-002: Public/private header layout and inclusion guards
etr Apr 30, 2026
243ec8f
Fix CI: drop C++20-incompatible compilers and add libmicrohttpd-devel…
etr May 1, 2026
5b78014
Fix MSYS/Cygwin build: expose _DEFAULT_SOURCE for libmicrohttpd's fd_…
etr May 1, 2026
b9ef39d
Fix CI follow-up: add LGPL header to gate tests, drop ubuntu-toolchai…
etr May 1, 2026
6b87fea
TASK-003: Add httpserver::feature_unavailable exception type
etr May 1, 2026
a05f79c
Merge TASK-003: Add httpserver::feature_unavailable exception type
etr May 1, 2026
74c1726
TASK-004: Add httpserver::iovec_entry POD with layout-pinning asserts
etr May 1, 2026
259b4bb
TASK-004: fix use-after-free in copy ctor, header hygiene, test impro…
etr May 1, 2026
d2a2544
Merge TASK-004: Add httpserver::iovec_entry POD with layout-pinning a…
etr May 2, 2026
03533c6
TASK-005: Add http_method enum and method_set bitmask
etr May 2, 2026
a3ec719
Merge TASK-005: Add http_method enum and method_set bitmask
etr May 2, 2026
71bf2a2
TASK-006: Replace #define constants with httpserver::constants
etr May 3, 2026
c93ee31
TASK-006: housekeeping (status + checkboxes)
etr May 3, 2026
0e0d001
TASK-006: housekeeping (mark task complete in index)
etr May 3, 2026
7c2f460
Merge TASK-006: Replace #define constants with httpserver::constants
etr May 3, 2026
6018559
TASK-007: CI test for public-header hygiene
etr May 3, 2026
f3c0292
TASK-007: share staged install across check-local; skip make check on…
etr May 3, 2026
064b7fc
Merge TASK-007: CI test for public-header hygiene
etr May 3, 2026
1228e20
TASK-007: housekeeping (mark task complete in index)
etr May 3, 2026
13f0818
TASK-008: Internal detail::body hierarchy
etr May 3, 2026
828006c
TASK-008: review-pass fixes (security + performance iter1)
etr May 3, 2026
d206af5
Merge TASK-008: Internal detail::body hierarchy
etr May 3, 2026
454e3d4
TASK-008: housekeeping (mark task complete in index)
etr May 3, 2026
6388623
specs: add planning scaffolding and review records
etr May 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 47 additions & 71 deletions .github/workflows/verify-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,26 +108,7 @@ jobs:
debug: debug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: gcc
c-compiler: gcc-9
cc-compiler: g++-9
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
debug: nodebug
coverage: nocoverage
shell: bash
# gcc-9 and gcc-10 dropped: lack full C++20 support (no concepts library, no std::span, no <bit> features).
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
Expand Down Expand Up @@ -168,26 +149,8 @@ jobs:
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-11
cc-compiler: clang++-11
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-12
cc-compiler: clang++-12
debug: nodebug
coverage: nocoverage
shell: bash
# clang-11, clang-12, clang-14, and clang-15 dropped: incomplete C++20 support (concepts/<bit>/<span> gaps).
# clang-13 retained: passes the autoconf C++20 feature check on ubuntu-22.04.
- test-group: extra
os: ubuntu-22.04
os-type: ubuntu
Expand All @@ -198,26 +161,6 @@ jobs:
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-14
cc-compiler: clang++-14
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: none
compiler-family: clang
c-compiler: clang-15
cc-compiler: clang++-15
debug: nodebug
coverage: nocoverage
shell: bash
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
Expand Down Expand Up @@ -275,8 +218,8 @@ jobs:
os-type: ubuntu
build-type: select
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -285,8 +228,8 @@ jobs:
os-type: ubuntu
build-type: nodelay
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -295,8 +238,8 @@ jobs:
os-type: ubuntu
build-type: threads
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
shell: bash
Expand All @@ -305,11 +248,29 @@ jobs:
os-type: ubuntu
build-type: lint
compiler-family: gcc
c-compiler: gcc-10
cc-compiler: g++-10
c-compiler: gcc-14
cc-compiler: g++-14
debug: debug
coverage: nocoverage
shell: bash
# TASK-007: dedicated header-hygiene gate. Runs `make check-hygiene`
# (preprocesses <httpserver.hpp> against the staged install and greps
# for forbidden backend headers). Surfaces this gate as its own named
# GitHub Actions check so reviewers see header-hygiene status
# independently of the broader `make check` log. Until M5 lands the
# check is informational (HEADER_HYGIENE_STRICT defaults to "no");
# TASK-020 flips it to strict.
- test-group: extra
os: ubuntu-latest
os-type: ubuntu
build-type: header-hygiene
compiler-family: gcc
c-compiler: gcc-14
cc-compiler: g++-14
debug: nodebug
coverage: nocoverage
linking: dynamic
shell: bash
- test-group: basic
os: windows-latest
os-type: windows
Expand Down Expand Up @@ -393,8 +354,12 @@ jobs:
pacman --noconfirm -S --needed msys2-devel gcc make libcurl-devel libgnutls-devel

- name: Install Ubuntu test sources
# ppa:ubuntu-toolchain-r/test was historically used to backport newer
# gcc onto older Ubuntu LTS. With the C++20 floor (TASK-001), our matrix
# only retains compilers that ship in stock ubuntu-22.04 / 24.04 repos
# (gcc-11..14, clang-13/16/17/18), so the PPA is no longer needed -- and
# add-apt-repository talks to launchpad, which is a flaky dependency.
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test ;
sudo apt-get update ;
if: ${{ matrix.os-type == 'ubuntu' }}

Expand Down Expand Up @@ -662,7 +627,7 @@ jobs:
# IWYU always return an error code. If it returns "2" it indicates a success so we manage this within the function below.
function safe_make_iwyu() {
{
make -k CXX='/usr/local/bin/include-what-you-use -Xiwyu --mapping_file=${top_builddir}/../custom_iwyu.imp' CXXFLAGS="-std=c++11 -DHTTPSERVER_COMPILATION -D_REENTRANT $CXXFLAGS" ;
make -k CXX='/usr/local/bin/include-what-you-use -Xiwyu --mapping_file=${top_builddir}/../custom_iwyu.imp' CXXFLAGS="-std=c++20 -DHTTPSERVER_COMPILATION -D_REENTRANT $CXXFLAGS" ;
} || {
if [ $? -ne 2 ]; then
return 1;
Expand All @@ -685,7 +650,18 @@ jobs:
run: |
cd build ;
make check;
if: ${{ matrix.build-type != 'iwyu' && matrix.compiler-family != 'arm-cross' }}
if: ${{ matrix.build-type != 'iwyu' && matrix.compiler-family != 'arm-cross' && matrix.build-type != 'header-hygiene' }}

- name: Run header-hygiene check
# TASK-007: dedicated public-header hygiene gate. Runs the
# preprocessor-grep target (Layer 2) against a staged install and
# reports any forbidden backend headers reaching <httpserver.hpp>.
# Currently informational (HEADER_HYGIENE_STRICT=no) -- TASK-020
# flips this to strict when M5 closes the umbrella.
run: |
cd build
make check-hygiene
if: ${{ matrix.build-type == 'header-hygiene' }}

- name: Print tests results
shell: bash
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,5 @@ libtool
.worktrees
.claude
CLAUDE.md
.groundwork-plans/
.DS_Store
5 changes: 5 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
Version 0.20.0

Raised minimum C++ standard to C++20. Build now requires gcc >= 10
or clang >= 13 (Apple Clang from Xcode 15+). Updated
AX_CXX_COMPILE_STDCXX macro (m4/ax_cxx_compile_stdcxx.m4) to
serial 25 to support C++20 detection. Pruned CI matrix rows
(gcc-9, clang-11, clang-12) that lack full C++20 support.
Raised minimum libmicrohttpd requirement to 1.0.0.
Migrated Basic Auth to v3 API (MHD_basic_auth_get_username_password3,
MHD_queue_basic_auth_required_response3) with UTF-8 support.
Expand Down
Loading
Loading