Skip to main content

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.cpp is a test, name.fail.t.cpp must fail, name.disabled.t.cpp is 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 and find_dependency() calls derived from besa_dependency_add(). Consumers never need BESA.
  • A manifest for tooling — build/besa/manifest.json describes 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):

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)

Source distribution for besa 0.4.8
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)

Table of built distributions (wheels) for besa 0.4.8
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page