BESA
A declarative project model for CMake. Describe your libraries, their source trees, the features they support and how they are tested; BESA turns that into CMake targets, CTest tests, an installable package and a manifest that documentation tools can read.
cmake_minimum_required(VERSION 4.3)
project(greet VERSION 1.2.0 LANGUAGES NONE)
find_package(besa CONFIG REQUIRED)
include(cmake/options.cmake) # declares options, calls besa_finalize_options()
include(CTest)
besa_add_library(NAME libgreet) # greet::libgreet
besa_add_directory(LIBRARY libgreet ROOT src TYPE cpp) # src/include/**, src/lib/**
besa_add_subdirectory(DIRECTORY bin TYPE bin) # one executable per file in bin/
target_link_libraries(greet-cli PRIVATE greet::libgreet)
if(BUILD_TESTING)
besa_test_add_directory(NAME tests PREFIX greet TARGET_LIST greet::libgreet) # tests/**/*.t.cpp
endif()
That is a complete project with public headers, an installed CLI, a
discovered test suite, a generated greet/version.hpp, make install with
greetConfig.cmake and a CPS description, and sanitizers, coverage,
clang-format and clang-tidy one -D flag away.
Highlights
- Semantic source units —
include/,lib/,module/,mod/under a root, compiled in a declared language (c,cpp,cuda,hip,fortran), attached to any library. Several units per library, several libraries per project. - Features with validated combinations — declare
gpu,mpi, …; express "exactly one backend, optionally MPI" as a finite feature space; invalid selections fail at configure time with the rule that rejected them. - Tests by convention —
name.t.cppis a test,name.fail.t.cppmust fail,name.disabled.t.cppis disabled; compile-only tests; project-defined test modes (ci-commit,ci-merge). - One devtool switch —
-DBUILD_DEVTOOLS="asan;ubsan;coverage;format;linting;surrogate"instruments every target and registers the corresponding checks. - Packaging that works downstream —
<Project>Config.cmake, exported targets, CPS, an installation manifest andfind_dependency()calls derived frombesa_dependency_add(). Consumers never need BESA. - A manifest for tooling —
build/besa/manifest.jsondescribes units, languages, options and features; cpdocs builds versioned API documentation from it without a second project description.
Install
# as a CMake package
cmake -S besa -B besa/build && cmake --install besa/build --prefix ~/.local
# or vendored into your repository
pip install besa && besa vendor # writes cmake/besa/; then set(besa_DIR cmake/besa)
Requires CMake 4.3+. Tested with GCC 13–16 and Clang 21+.
Documentation
Full documentation lives in docs/ and is built with
ProperDocs (properdocs serve):
- Installation · Your first project · Layout at a glance
- How a BESA project is configured · Libraries and source units · Features · Feature spaces · Tests · Developer tools · Packaging
- Command reference · Cache variables · The manifest
Developing BESA
cmake -S . -B build -DBUILD_TESTING=ON && ctest --test-dir build --output-on-failure
uv run --project dev besa-dev run gcc-16 # the CI container for one compiler
See Contributing. Licensed under Apache-2.0.
Metadata
Release files for besa 0.4.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| besa-0.4.8.tar.gz | 125.7 kB | Without provenance | Details for besa-0.4.8.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| besa-0.4.8-py3-none-any.whl | Python 3 | none | any | Details for besa-0.4.8-py3-none-any.whl |
Total release size: 185.3 kB
Release files / besa-0.4.8.tar.gz
| Download URL | besa-0.4.8.tar.gz |
|---|---|
| Size | 125.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ffc90233e82eb67a606cef5db86cdeb9d6cf7db99a1d11c6f45a1e216b5ece41
|
|
BLAKE2b-256 checksum How to use checksums |
00fa6ac7860fb19cf064d1e4907f7077a6f6ec304728460625d26604f77695a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.18.1 {"ci":null,"cpu":"x86_64","distro":{"libc":{"lib":"glibc","version":"2.44"},"name":"Arch Linux"},"implementation":{"name":"CPython","version":"3.14.9"},"installer":{"name":"hatch","version":"1.18.1"},"openssl_version":"OpenSSL 3.6.5 29 Sep 2026","python":"3.14.9","system":{"name":"Linux","release":"6.18.60-1-lts"}} HTTPX2/2.13.1
|
Release files / besa-0.4.8-py3-none-any.whl
| Download URL | besa-0.4.8-py3-none-any.whl |
|---|---|
| Size | 59.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
379e9d81286c56a40e6a03ef7a09b2339172320724855020b20067d5e3c63801
|
|
BLAKE2b-256 checksum How to use checksums |
c520379d6890227f14a561e1bf26c2ee9b2575bcc79db07c52c2d56bad22f6de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
Hatch/1.18.1 {"ci":null,"cpu":"x86_64","distro":{"libc":{"lib":"glibc","version":"2.44"},"name":"Arch Linux"},"implementation":{"name":"CPython","version":"3.14.9"},"installer":{"name":"hatch","version":"1.18.1"},"openssl_version":"OpenSSL 3.6.5 29 Sep 2026","python":"3.14.9","system":{"name":"Linux","release":"6.18.60-1-lts"}} HTTPX2/2.13.1
|
Security for besa 0.4.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.