./textproc/fmtlib, Formatting library

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]

Branch: CURRENT, Version: 9.1.0, Package name: fmtlib-9.1.0, Maintainer: pkgsrc-users

fmt (formerly cppformat) is an open-source formatting library. It can be used
as a fast and safe alternative to printf and IOStreams.

Master sites:

Filesize: 818.263 KB

Version history: (Expand)

CVS history: (Expand)

   2023-01-24 19:36:36 by Thomas Klausner | Files touched by this commit (103)
Log message:
*: convert to cmake/build.mk
   2022-10-08 11:43:19 by Benny Siegert | Files touched by this commit (3) | Package updated
Log message:
fmtlib: update to 9.1.0

From Wongboo via Github pull request.

Closes NetBSD/pkgsrc#111.

9.1.0 - 2022-08-27

* ``fmt::formatted_size`` now works at compile time
  . For example
  (`godbolt <https://godbolt.org/z/1MW5rMdf8>`__):

  .. code:: c++

     #include <fmt/compile.h>

     int main() {
       using namespace fmt::literals;
       constexpr size_t n = fmt::formatted_size("{}"_cf, 42);
       fmt::print("{}\n", n); // prints 2

* Fixed handling of invalid UTF-8.

* Improved Unicode support in ``ostream`` overloads of ``print``.

* Fixed handling of the sign specifier in localized formatting on systems with
  32-bit ``wchar_t`` .

* Added support for wide streams to ``fmt::streamed``.

* Added the ``n`` specifier that disables the output of delimiters when
  formatting ranges.
  For example (`godbolt <https://godbolt.org/z/roKqGdj8c>`__):

  .. code:: c++

     #include <fmt/ranges.h>
     #include <vector>

     int main() {
       auto v = std::vector{1, 2, 3};
       fmt::print("{:n}\n", v); // prints 1, 2, 3

* Worked around problematic ``std::string_view`` constructors introduced in

* Improve handling (exclusion) of recursive ranges

* Improved error reporting in format string compilation.

* Improved the implementation of
  `Dragonbox <https://github.com/jk-jeon/dragonbox>`_, the algorithm used for
  the default floating-point formatting.

* Fixed issues with floating-point formatting on exotic platforms.

* Improved the implementation of chrono formatting.

* Improved documentation.

* Improved build configuration.

* Fixed various warnings and compilation issues.

9.0.0 - 2022-07-04

* Switched to the internal floating point formatter for all decimal presentation
  formats. In particular this results in consistent rounding on all platforms
  and removing the ``s[n]printf`` fallback for decimal FP formatting.

* Compile-time floating point formatting no longer requires the header-only
  mode. For example (`godbolt <https://godbolt.org/z/G37PTeG3b>`__):

  .. code:: c++

     #include <array>
     #include <fmt/compile.h>

     consteval auto compile_time_dtoa(double value) -> std::array<char, \ 
10> {
       auto result = std::array<char, 10>();
       fmt::format_to(result.data(), FMT_COMPILE("{}"), value);
       return result;

     constexpr auto answer = compile_time_dtoa(0.42);

  works with the default settings.

* Improved the implementation of
  `Dragonbox <https://github.com/jk-jeon/dragonbox>`_, the algorithm used for
  the default floating-point formatting.

* Made ``fmt::to_string`` work with ``__float128``. This uses the internal
  FP formatter and works even on system without ``__float128`` support in

* Disabled automatic ``std::ostream`` insertion operator (``operator<<``)
  discovery when ``fmt/ostream.h`` is included to prevent ODR violations.
  You can get the old behavior by defining ``FMT_DEPRECATED_OSTREAM`` but this
  will be removed in the next major release. Use ``fmt::streamed`` or
  ``fmt::ostream_formatter`` to enable formatting via ``std::ostream`` instead.

* Added ``fmt::ostream_formatter`` that can be used to write ``formatter``
  specializations that perform formatting via ``std::ostream``.
  For example (`godbolt <https://godbolt.org/z/5sEc5qMsf>`__):

  .. code:: c++

     #include <fmt/ostream.h>

     struct date {
       int year, month, day;

       friend std::ostream& operator<<(std::ostream& os, const \ 
date& d) {
         return os << d.year << '-' << d.month << '-' \ 
<< d.day;

     template <> struct fmt::formatter<date> : ostream_formatter {};

     std::string s = fmt::format("The date is {}", date{2012, 12, 9});
     // s == "The date is 2012-12-9"

* Added the ``fmt::streamed`` function that takes an object and formats it
  via ``std::ostream``.
  For example (`godbolt <https://godbolt.org/z/5G3346G1f>`__):

  .. code:: c++

     #include <thread>
     #include <fmt/ostream.h>

     int main() {
       fmt::print("Current thread id: {}\n",

  Note that ``fmt/std.h`` provides a ``formatter`` specialization for
  ``std::thread::id`` so you don't need to format it via ``std::ostream``.

* Deprecated implicit conversions of unscoped enums to integers for consistency
  with scoped enums.

* Added an argument-dependent lookup based ``format_as`` extension API to
  simplify formatting of enums.

* Added experimental ``std::variant`` formatting support.
  For example (`godbolt <https://godbolt.org/z/KG9z6cq68>`__):

  .. code:: c++

     #include <variant>
     #include <fmt/std.h>

     int main() {
       auto v = std::variant<int, std::string>(42);
       fmt::print("{}\n", v);



  Thanks `@jehelset <https://github.com/jehelset>`_.

* Added experimental ``std::filesystem::path`` formatting support
  (`#2865 <https://github.com/fmtlib/fmt/issues/2865>`_,
  `#2902 <https://github.com/fmtlib/fmt/pull/2902>`_,
  `#2917 <https://github.com/fmtlib/fmt/issues/2917>`_,
  `#2918 <https://github.com/fmtlib/fmt/pull/2918>`_).
  For example (`godbolt <https://godbolt.org/z/o44dMexEb>`__):

  .. code:: c++

     #include <filesystem>
     #include <fmt/std.h>

     int main() {
       fmt::print("There is no place like {}.", \ 


     There is no place like "/home".

* Added a ``std::thread::id`` formatter to ``fmt/std.h``.
  For example (`godbolt <https://godbolt.org/z/j1azbYf3E>`__):

  .. code:: c++

     #include <thread>
     #include <fmt/std.h>

     int main() {
       fmt::print("Current thread id: {}\n", std::this_thread::get_id());

* Added ``fmt::styled`` that applies a text style to an individual argument.
  For example (`godbolt <https://godbolt.org/z/vWGW7v5M6>`__):

  .. code:: c++

     #include <fmt/chrono.h>
     #include <fmt/color.h>

     int main() {
       auto now = std::chrono::system_clock::now();
         "[{}] {}: {}\n",
         fmt::styled(now, fmt::emphasis::bold),
         fmt::styled("error", fg(fmt::color::red)),
         "something went wrong");

* Made ``fmt::print`` overload for text styles correctly handle UTF-8.

* Fixed Unicode handling when writing to an ostream.

* Added support for nested specifiers to range formatting:

  .. code:: c++

     #include <vector>
     #include <fmt/ranges.h>

     int main() {
       fmt::print("{::#x}\n", std::vector{10, 20, 30});

  prints ``[0xa, 0x14, 0x1e]``.

* Implemented escaping of wide strings in ranges.

* Added support for ranges with ``begin`` / ``end`` found via the
  argument-dependent lookup.

* Fixed formatting of certain kinds of ranges of ranges.

* Fixed handling of maps with element types other than ``std::pair``.

* Made tuple formatter enabled only if elements are formattable.

* Made ``fmt::join`` compatible with format string compilation.

* Made compile-time checks work with named arguments of custom types and
  ``std::ostream`` ``print`` overloads.

* Removed ``make_args_checked`` because it is no longer needed for compile-time.

* Removed the following deprecated APIs: ``_format``, ``arg_join``,
  the ``format_to`` overload that takes a memory buffer,
  ``[v]fprintf`` that takes an ``ostream``.

* Removed the deprecated implicit conversion of ``[const] signed char*`` and
  ``[const] unsigned char*`` to C strings.

* Removed the deprecated ``fmt/locale.h``.

* Replaced the deprecated ``fileno()`` with ``descriptor()`` in

* Moved ``to_string_view`` to the ``detail`` namespace since it's an
  implementation detail.

* Made access mode of a created file consistent with ``fopen`` by setting
  ``S_IWGRP`` and ``S_IWOTH``.

* Removed a redundant buffer resize when formatting to ``std::ostream``.

* Made precision computation for strings consistent with width.

* Fixed handling of locale separators in floating point formatting.

* Made sign specifiers work with ``__int128_t``.

* Improved support for systems such as CHERI with extra data stored in pointers.

* Improved documentation.

* Improved build configuration.

* Fixed various warnings and compilation issues.
   2022-01-07 22:16:09 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
fmtlib: updated to 8.1.1

8.1.1 - 2022-01-06
* Restored ABI compatibility with version 8.0.x
* Fixed chorno formatting on big endian systems
* Fixed a linkage error with mingw

8.1.0 - 2022-01-02
* Optimized chrono formatting
  Processing of some specifiers such as ``%z`` and ``%Y`` is now up to 10-20
  times faster, for example on GCC 11 with libstdc++::

    Benchmark                                  Before             After
    FMTFormatter_z                             261 ns             26.3 ns
    FMTFormatterCompile_z                      246 ns             11.6 ns
    FMTFormatter_Y                             263 ns             26.1 ns
    FMTFormatterCompile_Y                      244 ns             10.5 ns
* Implemented subsecond formatting for chrono durations
  For example (`godbolt <https://godbolt.org/z/es7vWTETe>`__):

  .. code:: c++

     #include <fmt/chrono.h>

     int main() {
       fmt::print("{:%S}", std::chrono::milliseconds(1234));

  prints "01.234".
* Fixed handling of precision 0 when formatting chrono durations
* Fixed an overflow on invalid inputs in the ``tm`` formatter
* Added ``fmt::group_digits`` that formats integers with a non-localized digit
  separator (comma) for groups of three digits.
  For example (`godbolt <https://godbolt.org/z/TxGxG9Poq>`__):

  .. code:: c++

     #include <fmt/format.h>

     int main() {
       fmt::print("{} dollars", fmt::group_digits(1000000));

  prints "1,000,000 dollars".

* Added support for faint, conceal, reverse and blink text styles
* Added experimental support for compile-time floating point formatting
  It is currently limited to the header-only mode.
* Added UDL-based named argument support to compile-time format string checks
  For example (`godbolt <https://godbolt.org/z/ohGbbvonv>`__):

  .. code:: c++

     #include <fmt/format.h>

     int main() {
       using namespace fmt::literals;
       fmt::print("{answer:s}", "answer"_a=42);

  gives a compile-time error on compilers with C++20 ``consteval`` and non-type
  template parameter support (gcc 10+) because ``s`` is not a valid format
  specifier for an integer.
* Implemented escaping of string range elements.
  For example (`godbolt <https://godbolt.org/z/rKvM1vKf3>`__):

  .. code:: c++

     #include <fmt/ranges.h>
     #include <vector>

     int main() {
       fmt::print("{}", std::vector<std::string>{"\naan"});

  is now printed as::


  instead of::


* Switched to JSON-like representation of maps and sets for consistency with
  Python's ``str.format``.
  For example (`godbolt <https://godbolt.org/z/seKjoY9W5>`__):

  .. code:: c++

     #include <fmt/ranges.h>
     #include <map>

     int main() {
       fmt::print("{}", std::map<std::string, \ 
int>{{"answer", 42}});

  is now printed as::

    {"answer": 42}

* Extended ``fmt::join`` to support C++20-only ranges
* Optimized handling of non-const-iterable ranges and implemented initial
  support for non-const-formattable types.
* Disabled implicit conversions of scoped enums to integers that was
  accidentally introduced in earlier versions
* Deprecated implicit conversion of ``[const] signed char*`` and
  ``[const] unsigned char*`` to C strings.
* Deprecated ``_format``, a legacy UDL-based format API
* Marked ``format``, ``formatted_size`` and ``to_string`` as ``[[nodiscard]]``
* Added missing diagnostic when trying to format function and member pointers
  as well as objects convertible to pointers which is explicitly disallowed
* Optimized writing to a contiguous buffer with ``format_to_n``
* Optimized writing to non-``char`` buffers
* Decimal point is now localized when using the ``L`` specifier.
* Improved floating point formatter implementation
* Fixed handling of very large precision in fixed format
* Made a table of cached powers used in FP formatting static
* Resolved a lookup ambiguity with C++20 format-related functions due to ADL
* Removed unnecessary inline namespace qualification
* Implemented argument forwarding in ``format_to_n``
* Fixed handling of implicit conversions in ``fmt::to_string`` and format string
* Changed the default access mode of files created by ``fmt::output_file`` to
  ``-rw-r--r--`` for consistency with ``fopen``
* Make ``fmt::ostream::flush`` public
* Improved C++14/17 attribute detection
* Improved documentation
* Improved fuzzers and added a fuzzer for chrono timepoint formatting
* Added the ``FMT_SYSTEM_HEADERS`` CMake option setting which marks {fmt}'s
  headers as system. It can be used to suppress warnings
* Added the Bazel build system support
* Improved build configuration and tests
* Fixed various warnings and compilation issues
   2021-10-26 13:23:42 by Nia Alarie | Files touched by this commit (1161)
Log message:
textproc: Replace RMD160 checksums with BLAKE2s checksums

All checksums have been double-checked against existing RMD160 and
SHA512 hashes

Unfetchable distfiles (fetched conditionally?):
./textproc/convertlit/distinfo clit18src.zip
   2021-10-07 17:02:49 by Nia Alarie | Files touched by this commit (1162)
Log message:
textproc: Remove SHA1 hashes for distfiles
   2021-07-14 09:31:10 by Adam Ciarcinski | Files touched by this commit (3) | Package updated
Log message:
fmtlib: updated to 8.0.1

Fixed the version number in the inline namespace
Added a missing presentation type check for std::string
Fixed a linkage error when mixing code built with clang and gcc
Fixed documentation issues
Removed dead code in FP formatter
Fixed various warnings and compilation issues

Enabled compile-time format string check by default.
Added compile-time formatting
Optimized handling of format specifiers during format string compilation. For \ 
example, hexadecimal formatting ("{:x}") is now 3-7x faster than \ 
before when using format_to with format string compilation and a stack-allocated \ 
Added the _cf user-defined literal to represent a compiled format string. It can \ 
be used instead of the FMT_COMPILE macro
Format string compilation now requires format functions of formatter \ 
specializations for user-defined types to be const
Added UDL-based named argument support to format string compilation
Added format string compilation support to fmt::print
Added initial support for compiling {fmt} as a C++20 module
Made symbols private by default reducing shared library size. For example there \ 
was a ~15% reported reduction on one platform
Optimized includes making the result of preprocessing fmt/format.h ~20% smaller \ 
with libstdc++/C++20 and slightly improving build times
Added support of ranges with non-const begin / end
Added support of std::byte and other formattable types to fmt::join
Implemented the default format for std::chrono::system_clock
Made more chrono specifiers locale independent by default. Use the 'L' specifier \ 
to get localized formatting.
Improved locale handling in chrono formatting
   2020-11-26 10:31:18 by Adam Ciarcinski | Files touched by this commit (2) | Package updated
Log message:
fmtlib: updated to 7.1.3

Fixed handling of buffer boundaries in format_to_n.
Fixed linkage errors when linking with a shared library.
Reintroduced ostream support to range formatters.
Worked around an issue with mixing std versions in gcc

Fixed floating point formatting with large precision.

Fixed ABI compatibility with 7.0.x.
Added the FMT_ARM_ABI_COMPATIBILITY macro to work around ABI incompatibility \ 
between GCC and Clang on ARM.
Worked around a SFINAE bug in GCC 8.
Fixed linkage errors when building with GCC's LTO.
Fixed a compilation error when building without __builtin_clz or equivalent.
Fixed a sign conversion warning.

Switched from Grisu3 to Dragonbox for the default floating-point formatting \ 
which gives the shortest decimal representation with round-trip guarantee and \ 
correct rounding.
Added an experimental unsynchronized file output API which, together with format \ 
string compilation, can give 5-9 times speed up compared to fprintf on common \ 
Added a formatter for std::chrono::time_point<system_clock>.
Added support for ranges with non-const begin/end to fmt::join.
Added a memory_buffer::append overload that takes a range.
Improved handling of single code units in FMT_COMPILE.
Added dynamic width support to format string compilation.
Improved error reporting for unformattable types: now you'll get the type name \ 
directly in the error message instead of the note.
Added the make_args_checked function template that allows you to write \ 
formatting functions with compile-time format string checks and avoid binary \ 
code bloat.
Replaced snprintf fallback with a faster internal IEEE 754 float and double \ 
formatter for arbitrary precision.
Made format_to_n and formatted_size part of the core API.
Added fmt::format_to_n overload with format string compilation.
Added fmt::format_to overload that take text_style.
Made the # specifier emit trailing zeros in addition to the decimal point.
Changed the default floating point format to not include .0 for consistency with \ 
std::format and std::to_chars. It is possible to get the decimal point and \ 
trailing zero with the # specifier.
Fixed an issue with floating-point formatting that could result in addition of a \ 
non-significant trailing zero in rare cases e.g. 1.00e-34 instead of 1.0e-34.
Made fmt::to_string fallback on ostream insertion operator if the formatter \ 
specialization is not provided.
Added support for the append mode to the experimental file API and improved \ 
fcntl.h detection.
Fixed handling of types that have both an implicit conversion operator and an \ 
overloaded ostream insertion operator.
Fixed a slicing issue in an internal iterator type.
Fixed an issue in locale-specific integer formatting.
Fixed handling of exotic code unit types.
Removed dependency on windows.h.
Optimized counting of decimal digits on MSVC.
Improved documentation.
Added the FMT_REDUCE_INT_INSTANTIATIONS CMake option that reduces the binary \ 
code size at the cost of some integer formatting performance. This can be useful \ 
for extremely memory-constrained embedded systems.
Added the FMT_USE_INLINE_NAMESPACES macro to control usage of inline namespaces.
Improved build configuration
   2020-09-12 11:32:07 by Makoto Fujiwara | Files touched by this commit (1)
Log message:
(textproc/fmtlib) regen PLIST