This repository contains the basic data structures and utilities used throughout the Tunitas family of projects.
The main body of documentation for the Tunitas family of components and services can be found on the wiki, the web, also with the packagingupstream and with the build system temerarious-flagshipupstream. The overview and administrative declarations herein are necessarily summary in nature. The declarations and definitions in the packaging and build system areas are complete and should be interpreted as superceding these when the two are in conflict.
Current work with modern-generation tooling, e.g. circa Fedora 36+ and GCC 12+, is occurring around the v2-themed feature branches.
- Background
- Dependencies
- Installation
- Configuration
- Build
- Usage
- Security
- Contribute
- License
- Origin of the Name
The basics package provides common code which is used in client side (command-line or batch operations) as well as common server-side code. The components are organized according to namespace and segregated into separate libraries. These are typically delivered as shared libraries (DSOs) but may be built as static libraries (archives).
The configuration step will check for many but not all required packages and operating system features. There is a list of known package dependenciesupstream which you will need to install beyond your base operating system.
Generally, the dependencies are among:
- Certain other components of the Tunitas system; e.g. the Temerarious Flagship.
- A modern C++ development environment; meaning C++23, C++2B, C++20, C++2a in descending order of preference.
- A recent Fedora 30+, or RHEL8+, but any reasonable recent Linux distro should suffice.
The Tunitas project was developed on Fedora 27 through Fedora mid thirties using GCC 7 and GCC 8 with -fconcepts and at least -std=c++1z. The code has progressively been enhanced to use C++20 and CC++2b features as they become available. More details on the development environment and the build system can be found in
temerarious-flagshipupstream.
You may install this repo and its dependents by running something approximating (choose one):
git clone https://git.tunitas.technology/components/basics.git
git clone https://github.com/yahoo/tunitas-basics.gitThis will create a directory called tunitas-basics and download the contents of this repo to it.
Alternatively, if your organization already has made available the packaged version, then the following recipe will install the service:
sudo dnf install tunitas-basicsThe build system is based upon GNU Autotools.
The configuration of the repo consists of two steps which must be done once.
./buildconf./configure
The first step performs some crude assessments of the build environment and creates the site-specific configure'. Of course configure --helpwill explain the build options. The general options toconfigure` are widely documented.
The buildconf component is boilerplate and can be updated from
temerarious-flagship
upstream
as needed. The
Tunitas Build Systemupstream
should be available in /opt/tunitas and the template at /opt/tunitas/share/temerarious-flagship/bc/template.autotools-buildconf
To build and install this project, use the recipe shown following. This will install the build system into /opt/tunitas.
./buildconf &&
./configure &&
make &&
make check &&
make install &&
echo OK DONEA shortcut is ./maintenance/nearby which is not documented here.
To compile with the Tunitas components the relevant compiler options are expected.
The Makefile.am of the other Tunitas-family packages contain appropriate settings. These settings are enumerated in the following table:
| Variable | Default Value | Acceptable | --- | --- | | CPPFLAGS | -I/opt/tunitas/modules -I/opt/tunitas/include | | | CXXFLAGS | -std=c++20 -fconcepts | -std=c++da -fconcepts | | LDFLAGS | -L/opt/tunitas/lib64 -ltunitas | |
A summary catalog of componentsupstream is provided separately.
Static and DSO forms are built.
Their construction follows the best practices defined in Ulrich Drepper's opus How To Write Shared Libraries, 2011-12-10 (47 pages).
The Tunitas projects use C++23, C++2b, C++20, C++2a in descending order and any experimental extensions which are as close to the limit of the language as the tooling will allow. Especially of interest are the language extensions supporting the Concepts, Ranges and Modules TS. These are described in published language documentations such as C++ Experimental Features. Where the language elements are "not ready" then polyfill has occurred with "script kiddies" or other tooling crutches are supplied as necessary.
More details can be found in the documentation for the build system, temerarious-flagshipupstream.
Please refer to contribution cinstructionsupstream for information about how to get involved. We welcome issues, questions, and pull requests. Pull Requests are welcome.
- Wendell Baker wbaker@yahooinc.com
- The Tunitas Team at Yahoo.
You may contact us at least at tunitas@yahooinc.com
There are no special security concerns in the components of this repository.
This project is licensed under the terms of the Apache 2.0 open source license. Please refer to LICENSEupstream for the full terms.
Tunitas is a creek and also a small unincorporated portion of San Mateo County, California.