diff --git a/0001-install-pkg-config-file-into-libdir.patch b/0001-install-pkg-config-file-into-libdir.patch deleted file mode 100644 index f4d36a3..0000000 --- a/0001-install-pkg-config-file-into-libdir.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Olaf Hering -Date: Mon, 25 Mar 2019 17:10:40 +0100 -Subject: install pkg-config file into libdir - -Most pkgconfig files contain a Libs: variable, which is either /usr/lib -or /usr/lib64. If a 32bit and a 64bit variant of fmt libraries is -installed, the last one wins. As a result compiling for the other -bitsize will fail. - -Instead of sharedir use libdir as install target. - -Fixes commit 9d0c9c4bb145a286f725cd38c90331eee7addc7f -Fixes commit 287342dab10a5a96479b3e21cd11ce671ed8125c - -Signed-off-by: Olaf Hering ---- - CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -205,7 +205,7 @@ if (FMT_INSTALL) - set(FMT_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR}/fmt CACHE STRING - "Installation directory for include files, relative to ${CMAKE_INSTALL_PREFIX}.") - -- set(FMT_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH -+ set(FMT_PKGCONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/pkgconfig CACHE PATH - "Installation directory for pkgconfig (.pc) files, relative to ${CMAKE_INSTALL_PREFIX}.") - - # Generate the version, config and target files into the build directory. diff --git a/baselibs.conf b/baselibs.conf index 7afeb8b..bdc9cea 100644 --- a/baselibs.conf +++ b/baselibs.conf @@ -1 +1 @@ -libfmt5 +libfmt6 diff --git a/fmt-5.3.0.tar.gz b/fmt-5.3.0.tar.gz deleted file mode 100644 index 69bd8e9..0000000 --- a/fmt-5.3.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:defa24a9af4c622a7134076602070b45721a43c51598c8456ec6f2c4dbb51c89 -size 662493 diff --git a/fmt-6.0.0.tar.gz b/fmt-6.0.0.tar.gz new file mode 100644 index 0000000..576ed18 --- /dev/null +++ b/fmt-6.0.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1907a58d5e86e6c382e51441d92ad9e23aea63827ba47fd647eacc0d3a16c78 +size 708425 diff --git a/fmt-bigendian_1.patch b/fmt-bigendian_1.patch new file mode 100644 index 0000000..1e7f6af --- /dev/null +++ b/fmt-bigendian_1.patch @@ -0,0 +1,102 @@ +From bb205d940d8929d086eadb59705349dbdaa1a274 Mon Sep 17 00:00:00 2001 +From: Victor Zverovich +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(sizeof(void*)) - 1; + while (i > 0 && n.value[i] == 0) --i; + auto char_digits = std::numeric_limits::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(&source)` that doesn't produce ++// An equivalent of `*reinterpret_cast(&source)` that doesn't have + // undefined behavior (e.g. due to type aliasing). + // Example: uint64_t d = bit_cast(2.718); + template +@@ -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(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(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(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 + using iterator_t = decltype(std::begin(std::declval())); +@@ -1731,7 +1747,7 @@ class arg_formatter_base { + } + + void write_pointer(const void* p) { +- writer_.write_pointer(internal::bit_cast(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( ++ writer.write_pointer(fmt::internal::fallback_uintptr( + reinterpret_cast(0xface)), + nullptr); + EXPECT_EQ("0xface", to_string(buf)); diff --git a/fmt-bigendian_2.patch b/fmt-bigendian_2.patch new file mode 100644 index 0000000..69e74e5 --- /dev/null +++ b/fmt-bigendian_2.patch @@ -0,0 +1,25 @@ +From aaf829bfb124fcd7953c33f38154027537efb072 Mon Sep 17 00:00:00 2001 +From: Victor Zverovich +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(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 diff --git a/fmt-bigendian_3.patch b/fmt-bigendian_3.patch new file mode 100644 index 0000000..4534437 --- /dev/null +++ b/fmt-bigendian_3.patch @@ -0,0 +1,35 @@ +From fafb03fa6d764f3cedf80e222a1e5998b80ef79c Mon Sep 17 00:00:00 2001 +From: Victor Zverovich +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 + inline typename Container::value_type* get_data(Container& c) { + return c.data(); + } ++template constexpr int digits() { ++ return std::numeric_limits::digits; ++} ++template <> constexpr int digits() { ++ return sizeof(void*) * std::numeric_limits::digits; ++} + + #ifdef _SECURE_SCL + // Make a checked iterator to avoid MSVC warnings. +@@ -900,7 +906,7 @@ Char* format_uint(Char* buffer, internal + template + 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::digits / BASE_BITS + 1]; ++ char buffer[digits() / BASE_BITS + 1]; + format_uint(buffer, value, num_digits, upper); + return internal::copy_str(buffer, buffer + num_digits, out); + } diff --git a/fmt-bigendian_4.patch b/fmt-bigendian_4.patch new file mode 100644 index 0000000..cfc746a --- /dev/null +++ b/fmt-bigendian_4.patch @@ -0,0 +1,38 @@ +From ba6e330fd3a9c2d859d651c59d6206620940a265 Mon Sep 17 00:00:00 2001 +From: Victor Zverovich +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 + inline typename Container::value_type* get_data(Container& c) { + return c.data(); + } +-template constexpr int digits() { ++template constexpr int num_bits() { + return std::numeric_limits::digits; + } +-template <> constexpr int digits() { +- return sizeof(void*) * std::numeric_limits::digits; ++template <> constexpr int num_bits() { ++ return static_cast(sizeof(void*) * ++ std::numeric_limits::digits); + } + + #ifdef _SECURE_SCL +@@ -906,7 +907,7 @@ Char* format_uint(Char* buffer, internal + template + 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() / BASE_BITS + 1]; ++ char buffer[num_bits() / BASE_BITS + 1]; + format_uint(buffer, value, num_digits, upper); + return internal::copy_str(buffer, buffer + num_digits, out); + } diff --git a/fmt.changes b/fmt.changes index 191b3da..1f01271 100644 --- a/fmt.changes +++ b/fmt.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Sun Dec 1 08:54:54 UTC 2019 - Luigi Baldoni + +- Added fmt-bigendian_1.patch, fmt-bigendian_2.patch, + fmt-bigendian_3.patch and fmt-bigendian_4.patch to fix tests + on big endian targets + +------------------------------------------------------------------- +Fri Nov 29 08:46:30 UTC 2019 - Luigi Baldoni + +- Update to version 6.0.0 + (too many changes to list, see ChangeLog.rst) +- Dropped 0001-install-pkg-config-file-into-libdir.patch (no + longer necessary) +- Switched to MIT license +- Increased SOVERSION to 6 + ------------------------------------------------------------------- Mon Mar 25 16:21:01 UTC 2019 - olaf@aepfle.de diff --git a/fmt.spec b/fmt.spec index da0c8a7..e4f5888 100644 --- a/fmt.spec +++ b/fmt.spec @@ -1,7 +1,7 @@ # # spec file for package fmt # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,17 +16,24 @@ # -%define sover 5 +%define sover 6 Name: fmt -Version: 5.3.0 +Version: 6.0.0 Release: 0 Summary: A formatting library for C++ -License: BSD-2-Clause +License: MIT Group: Development/Libraries/C and C++ URL: http://fmtlib.net/ Source0: https://github.com/fmtlib/fmt/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz Source1: baselibs.conf -Patch0: 0001-install-pkg-config-file-into-libdir.patch +# 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: gcc-c++ BuildRequires: pkgconfig