This adds explicit specification of all library dependencies, which is
necessary for modular b2 builds and also for tracking usage requirements
from the dependencies.
This also introduces a new boost_sync_with_support target, which
provides a dependency on the main Boost.Sync library, as well as any
additional dependencies that are needed for support headers.
Added missing cxxstd32 tags. Also other minor cleanups and additions.
Removed clang-15 with libc++ job as we already test libc++ with a more
recent clang.
Removed older compilers that are no longer supported by the upstream
libraries, removed CI images that were removed from GitHub Actions,
added new compilers and ARM jobs.
- Added gcc-12 and clang-13 through 15 jobs.
- Added C++23 testing for gcc and clang on Linux.
- Updated clang version for UBSAN job.
- Updated Ubuntu version for clang jobs to avoid having to use external APT
repository.
- Updated python package installation for compatibility with Ubuntu 22.04.
In Ubuntu 20.04 there appeared an updated version of the
software-properties-common package in focal-updates, which ships a newer
apt-add-repository version that doesn't support -P/-S/-U command line arguments.
Since we cannot rely on package version checks to determine apt-add-repository
capabilities, we have to parse its --help output instead.
Also, made source list processing more protected against spaces.
there is the following race condition when `set` is called during
`wait`:
* thread A: wait() -> load the state value 0
* thread B: set() -> set state value to 1
* thread B: set() -> wake all waiters (semaphore_signal_all)
* thread A: wait() -> semaphore_wait
i didn't find a way to properly implement this without condition
variables (or futex-style APIs which are not available on macos).
so we should use the fallback emulation here
Use futex state to hold the number of waiters and avoid invoking futex wake
when there are no waiters blocked on the event. To improve efficiency of
atomic operations, switched to Boost.Atomic exclusively.
Also, documented that resetting the event has relaxed memory ordering
semantics.