Path to this page:
Subject: CVS commit: pkgsrc
From: Adam Ciarcinski
Date: 2021-09-29 18:11:04
Message id: 20210929161104.E2F66FA97@cvs.NetBSD.org
Log Message:
boost: updated to 1.77.0
1.77.0
New Libraries
Describe:
A C++14 reflection library, from Peter Dimov. Provides macros for describing \
enumerators and struct/class members, and primitives for querying this \
information.
Lambda2:
A C++14, dependency-free, single header lambda library, from Peter Dimov. Allows \
simple function objects to be constructed via expressions such as _1 + 5, _1 % 2 \
== 0, _1 > _2, or _1 == ' ' || _1 == '\t'.
Updated Libraries
Any:
Added boost::anys::basic_any - a data type with customizable Small Object \
Optimization whose instances can hold instances of any type that satisfies \
ValueType requirements (many thanks to Ruslan Arutyunyan @rarutyun). If you are \
not sure that you really need it, then use boost::any instead.
Started using GithubActions CI for additional testing
Asio:
Added support for cancellation of individual asynchronous operations.
Added the associator trait, used to generically forward associators.
Changed all asynchronous operations implemented in Asio to invoke their \
completion handlers as rvalue references.
Added support for asynchronous operations with multiple completion signatures.
Added operator&& and operator|| for awaitable<>, to allow \
coroutines to be trivially awaited in parallel.
Added the experimental::as_tuple completion token adapter.
Added the experimental::append completion token adapter.
Added the experimental::prepend completion token adapter.
Added the experimental::deferred completion token, whicih allows deferred \
execution of asynchronous operations.
Added the experimental::parallel_group class and \
experimental::make_parallel_group function.
Added experimental::promise, which allows eager execution and synchronisation of \
asynchronous operations.
Added the experimental::coro class template, a C++20 coroutine primitive with \
the ability to combine both asynchronous waiting (co_await) and yielding \
(co_yield).
Added move assignment to ssl::stream<>.
Changed co_spawn to dispatch the coroutine's initial step to the executor.
Enabled additional optimisations for any_executor and any_io_executor when used \
with asynchronous operations.
Added the nodiscard attribute to awaitable<>.
Increased the number of cached slots in the default recycling allocator.
Changed the default allocator behaviour to respect alignment requirements, to \
support over-aligned types.
Ensured the result strings are always initialised in reverse name resolution.
Fixed recursive template instantiation issues in \
use_awaitable_t::executor_with_default.
Fixed the any_io_executor equality operators to correctly return a result based \
on the target executor.
Fixed strand<> to avoid using a potentially moved-from executor.
Ensured gcc tests are not used for clang when detecting compiler features.
Disabled coroutines support for the clang shipped with MSVC.
Fixed compatibility with recent LibreSSL when OPENSSL_NO_SSL_INTERN is defined.
Fixed posix::basic_stream_descriptor move operations to work with non-defaulted \
executors.
Consult the Revision History for further details.
Atomic:
Added make_atomic_ref and make_ipc_atomic_ref factory functions for constructing \
atomic reference objects.
Added C++17 template argument deduction guides for atomic_ref and ipc_atomic_ref \
to allow omitting template arguments when they can be deduced from constructor \
arguments.
Beast:
This maintenance update brings minor bug fixes and updated CI reporting.
We'd love to know how you or your company use Beast, consider adding an entry to \
the Companies and Individuals Using Beast list.
See the full Release Notes for a complete list of changes.
Conversion:
boost::implicit_cast is now constexpr.
Fixed broken links.
Started using GithubActions CI for additional testing
Core:
boost/core/uncaught_exceptions.hpp has been modified for compatibility with Mac \
OS 10.4 and older.
DLL:
More runtime checks for malformed ELFs in boost::dll::library_info
In boost::dll::library_info use info from .dynsym ELF section if .symtab is \
empty or missing
List protected ELF symbols in boost::dll::library_info as they are available for \
import
Remove unneeded convert from wchar_t to char on POSIX environment, thanks to \
Vladislav Shchapov
Started using GithubAction CI for additional testing
Filesystem:
Introducing Boost.Filesystem v4. This new version of the library removes all \
deprecated features of v3 and also makes a number of breaking API changes \
intended to make Boost.Filesystem more compatible with std::filesystem \
introduced in C++17. The differences are described in the release notes and \
documentation using v3 and v4 tags and are also summarised in a separate \
section. Users can select Boost.Filesystem version by defining \
BOOST_FILESYSTEM_VERSION macro to either 3 or 4 when compiling their code. There \
is no need to separately compile Boost.Filesystem for each library version - a \
single binary supports both v3 and v4. Users should avoid using both v3 and v4 \
in the same application as this can lead to subtle bugs. Currently, v3 is the \
default. In a future release v4 will become the default, and eventually v3 will \
be removed. v4 is functional, but it is still a work in progress and there may \
be breaking API changes in the future.
v4: path::filename, path::stem and path::extension no longer consider root name \
or root directory of the path as a filename if the path only consists of those \
components. For example, on Windows path("C:").filename() used to \
return "C:" and path("C:\\").filename() used to return \
"\" and both will return an empty path now.
v4: path::stem and path::extension no longer treat a filename that starts with a \
dot and has no other dots as an extension. Filenames starting with a dot are \
commonly treated as filenames with an empty extension. The leading dot is used \
to indicate a hidden file on most UNIX-like systems.
New: Improved support for various path prefixes on Windows. Added support for \
local device prefix ("\\.\") and experimental support for NT path \
prefix ("\??\"). The prefixes will be included in the root name of a \
path. Note that using the prefixes with Boost.Filesystem v3 can lead to \
surprising results (e.g. path("\\\\.\\").stem() == "\\\\"). \
It is recommended to use the prefixes only with Boost.Filesystem v4.
Reworked path::lexically_normal implementation to eliminate some cases of \
duplicate dot (".") elements in the normalized paths.
New: Added runtime detection of the statx and getrandom system calls on Linux. \
This can be useful if the syscall is present at compile time but fails with \
ENOSYS at run time (for example, in Docker containers that restrict the syscall, \
even if available on the host).
New: Added support for disabling usage of various system APIs at library build \
time. This can be useful when a certain API is detected as present by the \
library configuration scripts but must not be used for some reason (for example, \
when runtime detection does not work on the target system). See the description \
of configuration macros in the library documentationfor for more details.
New: Added copy_options::synchronize_data and copy_options::synchronize options \
for the copy_file operation. These options allow to synchronize the written data \
and attributes with the permanent storage. These options are expensive in terms \
of performance, but allow to ensure reliability of the copied data. Note that \
copy_file performed implicit data synchronization on POSIX systems since \
Boost.Filesystem 1.74.0. This release adds support for more platforms and \
disables data synchronization by default while allowing the caller to explicitly \
request it.
Added handling of EINTR error code on POSIX systems for some system calls issued \
internally. In particular, EINTR could have been ignored on close, which on \
HP-UX would result in a leaked file descriptor.
In the copy_file implementations based on Linux sendfile and copy_file_range \
system calls, added handling of error codes indicating that a particular \
filesystem does not support the system call and fall back to the generic \
read/write loop. This should fix copy_file failing on eCryptFS and possibly \
other filesystems.
The copy_file_range system call is now used since Linux kernel 4.5, whereas \
previously it was only enabled since 5.3. The copy_file implementation will fall \
back to sendfile or read/write loop if copy_file_range fails to copy a given \
file across filesystems.
The copy_file implementations based on Linux sendfile and copy_file_range system \
calls will not be used on filesystems that are known to contain files with \
generated content. These system calls are incompatible with such files, and \
copying them would result in zero-sized files. The generic read/write loop will \
be used instead. Currently, the blacklisted filesystems are: procfs, sysfs, \
tracefs and debugfs.
In the copy_file implementation based on read/write loop, increased the maximum \
size of the buffer used for temporary storage and take into account the target \
filesystem block size for more optimal performance.
On Windows CE, calling current_path to obtain the current path for a process \
will now fail with an error instead of returning successfully with a root path. \
This platform does not support current directory. Changing the current path was \
already failing similarly in previous releases of Boost.Filesystem.
In canonical, fixed the check for a symlink referencing a directory above root, \
if an earlier symlink was resolved to an absolute path with a different root \
from the original path.
In canonical, added a limit for the maximum number of symlinks that can be \
resolved during the call. The limit is currently at least 40 symlinks.
On Windows, canonical and weakly_canonical will now use \
path::preferred_separator for the root directory separator in the resulting \
paths. This fixes "file not found" errors caused by Windows API not \
handling generic separators in UNC paths and paths that start with the Win32 \
filesystem prefix ("\\?\").
New: Added weakly_canonical overloads taking base path as an argument.
On Windows, weakly_canonical no longer fails with an error if the input path \
contains elements that do not exist in the filesystem but are cancelled by a \
subsequent dot-dot ("..") element. For example, \
weakly_canonical("C:\\a\\..") would previously fail if \
"C:\a" directory did not exist.
In read_symlink on Windows, corrected reparse point handling. The operation \
would return an empty path for some mount points (for example, created by Box \
cloud storage driver) and directory junction points that had empty print names. \
The new implementation now parses substitute name of the reparse point and \
attempts to reconstruct a Win32 path from it.
On Windows, file streams provided in boost/filesystem/fstream.hpp will use wide \
character paths on libc++ versions 7.0 and higher, when the standard library \
supports opening files with wide character paths.
On Windows, creating symlinks should no longer require elevated privileges, if \
Windows is configured in Developer mode.
With some compilers, global objects used internally in Boost.Filesystem are now \
destroyed after user's global destructors are called. This allows to call \
Boost.Filesystem methods during the program termination stage. In particular, \
this concerns the path locale that is used for character code conversion and can \
be installed by calling path::imbue. The supported compilers include MSVC, GCC \
and Clang, as well as other compilers that support customizing program \
initialization order through #pragma section (for MSVC-compatible compilers) or \
__attribute__ ((init_priority)) (for GCC-compatible compilers).
JSON:
value_to supports TupleLike types.
value_to and value_from support std::array and similar types.
Implicit conversion operator from string to std::string_view.
std::hash specializations for json types.
Fixed allocation errors in object and key_value_pair.
Fixed crash when constructing array from a pair of iterators that form an empty \
range.
LexicalCast:
Fixed assignment to an int of a floating point value that is out of \
representable range for int.
Started using GithubActions CI for additional testing
Log:
Fixed compilation for riscv32 target.
Mp11:
Added mp_intersperse, mp_split, mp_join
Multi-index Containers:
Maintenance work.
PFR:
A MurMur Hash based implementation of hash_combine() is now used to reduce \
collisions count and improve quality of boost::pfr::hash_value()
Visual Studio 2017 now supported in C++14 mode (thanks to Denis Mikhailov aka \
@denzor200)
Issues found by inspect tool were fixed
Fixed some warnings, including removal of extra semicolons in \
include/boost/pfr/detail/fields_count.hpp
Added a compile time assert for inherited types (thanks to Denis Mikhailov aka \
@denzor200)
Reflection of aggregates with non movable fields is now possible if guaranteed \
copy elision is on
Fixed spelling issues
Started using GithubActions CI for additional testing
PropertyTree:
This is a maintenance release.
Extend compiler coverage in CI.
Fix Boost compatibility for CMakeLists.txt.
System:
The conversion operator from error_category to std::error_category has been \
improved and no longer requires <map> or <mutex>.
The comparison operators of error_category are now inline friends instead of \
member functions (a side effect of the previous change.)
error_condition now defers calling generic_category() to avoid instantiating the \
object until it's actually needed.
error_condition::failed and error_condition::message have been undeprecated, and \
operator bool() now once again returns failed().
The system category now doesn't call generic_category(), to avoid instantiating \
the object.
The return value of default_error_condition changes in some cases into an \
error_condition from the generic category, instead of from the system category. \
This happens on POSIX when the input error_code is from the system category and \
does not correspond to any errc_t value.
The interoperability of error_code and std::error_code has been improved \
substantially. It is now possible to construct boost::system::error_code from \
std::error_code, and it's possible to pass boost::system::error_code to \
functions taking std::error_code&.
A stream insertion operator for error_condition has been added.
Uuid:
Added to_chars for writing uuid strings without allocating
Files: