Accepting request 752966 from home:alois:branches:devel:libraries:c_c++
update to 6.1.0 OBS-URL: https://build.opensuse.org/request/show/752966 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/fmt?expand=0&rev=11
This commit is contained in:
parent
093c9ccab8
commit
f9b3ea678d
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f1907a58d5e86e6c382e51441d92ad9e23aea63827ba47fd647eacc0d3a16c78
|
|
||||||
size 708425
|
|
3
fmt-6.1.0.tar.gz
Normal file
3
fmt-6.1.0.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8fb84291a7ed6b4db4769115b57fa56d5467b1ab8c3ba5bdf78c820e4bd17944
|
||||||
|
size 722127
|
@ -1,102 +0,0 @@
|
|||||||
From bb205d940d8929d086eadb59705349dbdaa1a274 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Victor Zverovich <victor.zverovich@gmail.com>
|
|
||||||
Date: Fri, 29 Nov 2019 05:15:59 -0800
|
|
||||||
Subject: [PATCH] Fix fallback pointer formatting on big endian
|
|
||||||
|
|
||||||
---
|
|
||||||
include/fmt/format-inl.h | 2 +-
|
|
||||||
include/fmt/format.h | 40 ++++++++++++++++++++++++++++------------
|
|
||||||
test/format-impl-test.cc | 2 +-
|
|
||||||
3 files changed, 30 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
Index: fmt-6.0.0/include/fmt/format-inl.h
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/include/fmt/format-inl.h
|
|
||||||
+++ fmt-6.0.0/include/fmt/format-inl.h
|
|
||||||
@@ -241,7 +241,7 @@ FMT_FUNC void system_error::init(int err
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
template <> FMT_FUNC int count_digits<4>(internal::fallback_uintptr n) {
|
|
||||||
- // Assume little endian; pointer formatting is implementation-defined anyway.
|
|
||||||
+ // fallback_uintptr is always stored in little endian.
|
|
||||||
int i = static_cast<int>(sizeof(void*)) - 1;
|
|
||||||
while (i > 0 && n.value[i] == 0) --i;
|
|
||||||
auto char_digits = std::numeric_limits<unsigned char>::digits / 4;
|
|
||||||
Index: fmt-6.0.0/include/fmt/format.h
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/include/fmt/format.h
|
|
||||||
+++ fmt-6.0.0/include/fmt/format.h
|
|
||||||
@@ -196,17 +196,7 @@ FMT_END_NAMESPACE
|
|
||||||
FMT_BEGIN_NAMESPACE
|
|
||||||
namespace internal {
|
|
||||||
|
|
||||||
-// A fallback implementation of uintptr_t for systems that lack it.
|
|
||||||
-struct fallback_uintptr {
|
|
||||||
- unsigned char value[sizeof(void*)];
|
|
||||||
-};
|
|
||||||
-#ifdef UINTPTR_MAX
|
|
||||||
-using uintptr_t = ::uintptr_t;
|
|
||||||
-#else
|
|
||||||
-using uintptr_t = fallback_uintptr;
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-// An equivalent of `*reinterpret_cast<Dest*>(&source)` that doesn't produce
|
|
||||||
+// An equivalent of `*reinterpret_cast<Dest*>(&source)` that doesn't have
|
|
||||||
// undefined behavior (e.g. due to type aliasing).
|
|
||||||
// Example: uint64_t d = bit_cast<uint64_t>(2.718);
|
|
||||||
template <typename Dest, typename Source>
|
|
||||||
@@ -217,6 +207,32 @@ inline Dest bit_cast(const Source& sourc
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
|
|
||||||
+inline bool is_big_endian() {
|
|
||||||
+ auto u = 1u;
|
|
||||||
+ struct bytes { char data[sizeof(u)]; };
|
|
||||||
+ return bit_cast<bytes>(u).data[0] == 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+// A fallback implementation of uintptr_t for systems that lack it.
|
|
||||||
+struct fallback_uintptr {
|
|
||||||
+ unsigned char value[sizeof(void*)];
|
|
||||||
+
|
|
||||||
+ fallback_uintptr() = default;
|
|
||||||
+ explicit fallback_uintptr(const void* p) {
|
|
||||||
+ *this = bit_cast<fallback_uintptr>(p);
|
|
||||||
+ if (is_big_endian()) std::memmove(value, value, sizeof(void*));
|
|
||||||
+ }
|
|
||||||
+};
|
|
||||||
+#ifdef UINTPTR_MAX
|
|
||||||
+using uintptr_t = ::uintptr_t;
|
|
||||||
+inline uintptr_t to_uintptr(const void* p) { return bit_cast<uintptr_t>(p); }
|
|
||||||
+#else
|
|
||||||
+using uintptr_t = fallback_uintptr;
|
|
||||||
+inline fallback_uintptr to_uintptr(const void* p) {
|
|
||||||
+ return fallback_uintptr(p);
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
// An approximation of iterator_t for pre-C++20 systems.
|
|
||||||
template <typename T>
|
|
||||||
using iterator_t = decltype(std::begin(std::declval<T&>()));
|
|
||||||
@@ -1731,7 +1747,7 @@ class arg_formatter_base {
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_pointer(const void* p) {
|
|
||||||
- writer_.write_pointer(internal::bit_cast<internal::uintptr_t>(p), specs_);
|
|
||||||
+ writer_.write_pointer(internal::to_uintptr(p), specs_);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Index: fmt-6.0.0/test/format-impl-test.cc
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/test/format-impl-test.cc
|
|
||||||
+++ fmt-6.0.0/test/format-impl-test.cc
|
|
||||||
@@ -259,7 +259,7 @@ TEST(UtilTest, CountDigits) {
|
|
||||||
TEST(UtilTest, WriteUIntPtr) {
|
|
||||||
fmt::memory_buffer buf;
|
|
||||||
fmt::internal::writer writer(buf);
|
|
||||||
- writer.write_pointer(fmt::internal::bit_cast<fmt::internal::fallback_uintptr>(
|
|
||||||
+ writer.write_pointer(fmt::internal::fallback_uintptr(
|
|
||||||
reinterpret_cast<void*>(0xface)),
|
|
||||||
nullptr);
|
|
||||||
EXPECT_EQ("0xface", to_string(buf));
|
|
@ -1,25 +0,0 @@
|
|||||||
From aaf829bfb124fcd7953c33f38154027537efb072 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Victor Zverovich <victor.zverovich@gmail.com>
|
|
||||||
Date: Fri, 29 Nov 2019 07:07:08 -0800
|
|
||||||
Subject: [PATCH] Fix fallback pointer formatting on big endian, take 2
|
|
||||||
|
|
||||||
---
|
|
||||||
include/fmt/format.h | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: fmt-6.0.0/include/fmt/format.h
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/include/fmt/format.h
|
|
||||||
+++ fmt-6.0.0/include/fmt/format.h
|
|
||||||
@@ -220,7 +220,10 @@ struct fallback_uintptr {
|
|
||||||
fallback_uintptr() = default;
|
|
||||||
explicit fallback_uintptr(const void* p) {
|
|
||||||
*this = bit_cast<fallback_uintptr>(p);
|
|
||||||
- if (is_big_endian()) std::memmove(value, value, sizeof(void*));
|
|
||||||
+ if (is_big_endian()) {
|
|
||||||
+ for (size_t i = 0, j = sizeof(void*) - 1; i < j; ++i, --j)
|
|
||||||
+ std::swap(value[i], value[j]);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
#ifdef UINTPTR_MAX
|
|
@ -1,35 +0,0 @@
|
|||||||
From fafb03fa6d764f3cedf80e222a1e5998b80ef79c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Victor Zverovich <victor.zverovich@gmail.com>
|
|
||||||
Date: Sat, 30 Nov 2019 06:35:52 -0800
|
|
||||||
Subject: [PATCH] Fix handling of fallback_uintptr
|
|
||||||
|
|
||||||
---
|
|
||||||
include/fmt/format.h | 8 +++++++-
|
|
||||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
Index: fmt-6.0.0/include/fmt/format.h
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/include/fmt/format.h
|
|
||||||
+++ fmt-6.0.0/include/fmt/format.h
|
|
||||||
@@ -281,6 +281,12 @@ template <typename Container>
|
|
||||||
inline typename Container::value_type* get_data(Container& c) {
|
|
||||||
return c.data();
|
|
||||||
}
|
|
||||||
+template <typename T> constexpr int digits() {
|
|
||||||
+ return std::numeric_limits<T>::digits;
|
|
||||||
+}
|
|
||||||
+template <> constexpr int digits<fallback_uintptr>() {
|
|
||||||
+ return sizeof(void*) * std::numeric_limits<unsigned char>::digits;
|
|
||||||
+}
|
|
||||||
|
|
||||||
#ifdef _SECURE_SCL
|
|
||||||
// Make a checked iterator to avoid MSVC warnings.
|
|
||||||
@@ -900,7 +906,7 @@ Char* format_uint(Char* buffer, internal
|
|
||||||
template <unsigned BASE_BITS, typename Char, typename It, typename UInt>
|
|
||||||
inline It format_uint(It out, UInt value, int num_digits, bool upper = false) {
|
|
||||||
// Buffer should be large enough to hold all digits (digits / BASE_BITS + 1).
|
|
||||||
- char buffer[std::numeric_limits<UInt>::digits / BASE_BITS + 1];
|
|
||||||
+ char buffer[digits<UInt>() / BASE_BITS + 1];
|
|
||||||
format_uint<BASE_BITS>(buffer, value, num_digits, upper);
|
|
||||||
return internal::copy_str<Char>(buffer, buffer + num_digits, out);
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
From ba6e330fd3a9c2d859d651c59d6206620940a265 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Victor Zverovich <victor.zverovich@gmail.com>
|
|
||||||
Date: Sat, 30 Nov 2019 08:19:58 -0800
|
|
||||||
Subject: [PATCH] digits -> num_bits
|
|
||||||
|
|
||||||
---
|
|
||||||
include/fmt/format.h | 9 +++++----
|
|
||||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
Index: fmt-6.0.0/include/fmt/format.h
|
|
||||||
===================================================================
|
|
||||||
--- fmt-6.0.0.orig/include/fmt/format.h
|
|
||||||
+++ fmt-6.0.0/include/fmt/format.h
|
|
||||||
@@ -281,11 +281,12 @@ template <typename Container>
|
|
||||||
inline typename Container::value_type* get_data(Container& c) {
|
|
||||||
return c.data();
|
|
||||||
}
|
|
||||||
-template <typename T> constexpr int digits() {
|
|
||||||
+template <typename T> constexpr int num_bits() {
|
|
||||||
return std::numeric_limits<T>::digits;
|
|
||||||
}
|
|
||||||
-template <> constexpr int digits<fallback_uintptr>() {
|
|
||||||
- return sizeof(void*) * std::numeric_limits<unsigned char>::digits;
|
|
||||||
+template <> constexpr int num_bits<fallback_uintptr>() {
|
|
||||||
+ return static_cast<int>(sizeof(void*) *
|
|
||||||
+ std::numeric_limits<unsigned char>::digits);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _SECURE_SCL
|
|
||||||
@@ -906,7 +907,7 @@ Char* format_uint(Char* buffer, internal
|
|
||||||
template <unsigned BASE_BITS, typename Char, typename It, typename UInt>
|
|
||||||
inline It format_uint(It out, UInt value, int num_digits, bool upper = false) {
|
|
||||||
// Buffer should be large enough to hold all digits (digits / BASE_BITS + 1).
|
|
||||||
- char buffer[digits<UInt>() / BASE_BITS + 1];
|
|
||||||
+ char buffer[num_bits<UInt>() / BASE_BITS + 1];
|
|
||||||
format_uint<BASE_BITS>(buffer, value, num_digits, upper);
|
|
||||||
return internal::copy_str<Char>(buffer, buffer + num_digits, out);
|
|
||||||
}
|
|
134
fmt.changes
134
fmt.changes
@ -1,9 +1,135 @@
|
|||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sun Dec 1 08:54:54 UTC 2019 - Luigi Baldoni <aloisio@gmx.com>
|
Mon Dec 2 15:07:08 UTC 2019 - Luigi Baldoni <aloisio@gmx.com>
|
||||||
|
|
||||||
- Added fmt-bigendian_1.patch, fmt-bigendian_2.patch,
|
- Update to version 6.1.0
|
||||||
fmt-bigendian_3.patch and fmt-bigendian_4.patch to fix tests
|
* {fmt} now formats IEEE 754 ``float`` and ``double`` using
|
||||||
on big endian targets
|
the shortest decimal representation with correct rounding by
|
||||||
|
default:
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <fmt/core.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
fmt::print("{}", M_PI);
|
||||||
|
}
|
||||||
|
|
||||||
|
prints ``3.141592653589793``.
|
||||||
|
* Made the fast binary to decimal floating-point formatter the
|
||||||
|
default, simplified it and improved performance. {fmt} is now
|
||||||
|
15 times faster than libc++'s ``std::ostringstream``, 11
|
||||||
|
times faster than ``printf`` and 10% faster than
|
||||||
|
double-conversion on `dtoa-benchmark
|
||||||
|
(https://github.com/fmtlib/dtoa-benchmark)
|
||||||
|
|
||||||
|
================== ========= =======
|
||||||
|
Function Time (ns) Speedup
|
||||||
|
================== ========= =======
|
||||||
|
ostringstream 1,346.30 1.00x
|
||||||
|
ostrstream 1,195.74 1.13x
|
||||||
|
sprintf 995.08 1.35x
|
||||||
|
doubleconv 99.10 13.59x
|
||||||
|
fmt 88.34 15.24x
|
||||||
|
================== ========= =======
|
||||||
|
* {fmt} no longer converts ``float`` arguments to ``double``.
|
||||||
|
In particular this improves the default (shortest)
|
||||||
|
representation of floats and makes
|
||||||
|
``fmt::format`` consistent with ``std::format`` specs
|
||||||
|
(#1336, #1353, #1360, #1361)
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
fmt::print("{}", 0.1f);
|
||||||
|
|
||||||
|
prints ``0.1`` instead of ``0.10000000149011612``.
|
||||||
|
* Made floating-point formatting output consistent with
|
||||||
|
``printf``/iostreams (#1376, #1417)
|
||||||
|
* Added support for 128-bit integers (#1287)
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
fmt::print("{}", std::numeric_limits<__int128_t>::max());
|
||||||
|
|
||||||
|
prints ``170141183460469231731687303715884105727``.
|
||||||
|
* The overload of ``print`` that takes ``text_style`` is now
|
||||||
|
atomic, i.e. the output from different threads doesn't
|
||||||
|
interleave (#1351)
|
||||||
|
* Made compile time in the header-only mode ~20% faster by
|
||||||
|
reducing the number of template instantiations. ``wchar_t``
|
||||||
|
overload of ``vprint`` was moved from
|
||||||
|
``fmt/core.h`` to ``fmt/format.h``.
|
||||||
|
* Added an overload of ``fmt::join`` that works with tuples
|
||||||
|
(#1322, #1330)
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
#include <fmt/ranges.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::tuple<char, int, float> t{'a', 1, 2.0f};
|
||||||
|
fmt::print("{}", t);
|
||||||
|
}
|
||||||
|
|
||||||
|
prints ``('a', 1, 2.0)``.
|
||||||
|
* Changed formatting of octal zero with prefix from "0o0" to
|
||||||
|
"0":
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
fmt::print("{:#o}", 0);
|
||||||
|
|
||||||
|
prints ``0``.
|
||||||
|
* The locale is now passed to ostream insertion (``<<``)
|
||||||
|
operators (#1406)
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
#include <fmt/locale.h>
|
||||||
|
#include <fmt/ostream.h>
|
||||||
|
|
||||||
|
struct S {
|
||||||
|
double value;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, S s) {
|
||||||
|
return os << s.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
auto s = fmt::format(std::locale("fr_FR.UTF-8"), "{}", S{0.42});
|
||||||
|
// s == "0,42"
|
||||||
|
}
|
||||||
|
* Locale-specific number formatting now uses grouping (#1393,
|
||||||
|
#1394)
|
||||||
|
* Fixed handling of types with deleted implicit rvalue
|
||||||
|
conversion to ``const char**`` (#1421)
|
||||||
|
.. code:: c++
|
||||||
|
|
||||||
|
struct mystring {
|
||||||
|
operator const char*() const&;
|
||||||
|
operator const char*() &;
|
||||||
|
operator const char*() const&& = delete;
|
||||||
|
operator const char*() && = delete;
|
||||||
|
};
|
||||||
|
mystring str;
|
||||||
|
fmt::print("{}", str); // now compiles
|
||||||
|
* Enums are now mapped to correct underlying types instead of
|
||||||
|
``int`` (#1286)
|
||||||
|
* Enum classes are no longer implicitly converted to ``int``
|
||||||
|
(#1424)
|
||||||
|
* Added ``basic_format_parse_context`` for consistency with
|
||||||
|
C++20 ``std::format`` and deprecated ``basic_parse_context``.
|
||||||
|
* Fixed handling of UTF-8 in precision (#1389, #1390)
|
||||||
|
* Added a CUDA test (#1285, #1317)
|
||||||
|
* Improved documentation (#1276, #1291, #1296, #1315, #1332,
|
||||||
|
#1337, #1395, #1418)
|
||||||
|
* Various code improvements (#1358, #1407)
|
||||||
|
* Fixed compile-time format string checks for user-defined
|
||||||
|
types (#1292)
|
||||||
|
* Worked around a false positive in
|
||||||
|
``unsigned-integer-overflow`` sanitizer (#1377)
|
||||||
|
* Fixed various warnings and compilation issues (#1273, #1278,
|
||||||
|
#1280, #1281, #1288, #1290, #1301, #1305, #1306, #1309,
|
||||||
|
#1312, #1313, #1316, #1319, #1320, #1326, #1328, #1344,
|
||||||
|
#1345, #1347, #1349, #1354, #1362, #1366, #1364, #1370,
|
||||||
|
#1371, #1385, #1388, #1397, #1414, #1416, #1422, #1427,
|
||||||
|
#1431, #1433)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Nov 29 08:46:30 UTC 2019 - Luigi Baldoni <aloisio@gmx.com>
|
Fri Nov 29 08:46:30 UTC 2019 - Luigi Baldoni <aloisio@gmx.com>
|
||||||
|
10
fmt.spec
10
fmt.spec
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
%define sover 6
|
%define sover 6
|
||||||
Name: fmt
|
Name: fmt
|
||||||
Version: 6.0.0
|
Version: 6.1.0
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A formatting library for C++
|
Summary: A formatting library for C++
|
||||||
License: MIT
|
License: MIT
|
||||||
@ -26,14 +26,6 @@ Group: Development/Libraries/C and C++
|
|||||||
URL: http://fmtlib.net/
|
URL: http://fmtlib.net/
|
||||||
Source0: https://github.com/fmtlib/fmt/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
Source0: https://github.com/fmtlib/fmt/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz
|
||||||
Source1: baselibs.conf
|
Source1: baselibs.conf
|
||||||
# PATCH-FIX-UPSTREAM fmt-bigendian_1.patch
|
|
||||||
Patch0: fmt-bigendian_1.patch
|
|
||||||
# PATCH-FIX-UPSTREAM fmt-bigendian_2.patch
|
|
||||||
Patch1: fmt-bigendian_2.patch
|
|
||||||
# PATCH-FIX-UPSTREAM fmt-bigendian_3.patch
|
|
||||||
Patch2: fmt-bigendian_3.patch
|
|
||||||
# PATCH-FIX-UPSTREAM fmt-bigendian_4.patch
|
|
||||||
Patch3: fmt-bigendian_4.patch
|
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: pkgconfig
|
BuildRequires: pkgconfig
|
||||||
|
Loading…
Reference in New Issue
Block a user