Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fmt for openSUSE:Factory checked in at 2022-01-08 23:23:11 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fmt (Old) and /work/SRC/openSUSE:Factory/.fmt.new.1892 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fmt" Sat Jan 8 23:23:11 2022 rev:18 rq:944681 version:8.1.1 Changes: -------- --- /work/SRC/openSUSE:Factory/fmt/fmt.changes 2022-01-05 13:39:26.821511162 +0100 +++ /work/SRC/openSUSE:Factory/.fmt.new.1892/fmt.changes 2022-01-08 23:23:25.950222498 +0100 @@ -1,0 +2,7 @@ +Fri Jan 7 08:36:43 UTC 2022 - Luigi Baldoni <aloi...@gmx.com> + +- Update to version 8.1.1 + * Restored ABI compatibility with version 8.0.x + * Fixed chorno formatting on big endian systems + +------------------------------------------------------------------- Old: ---- fmt-8.1.0.tar.gz New: ---- fmt-8.1.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fmt.spec ++++++ --- /var/tmp/diff_new_pack.zLiq8e/_old 2022-01-08 23:23:26.614223040 +0100 +++ /var/tmp/diff_new_pack.zLiq8e/_new 2022-01-08 23:23:26.622223046 +0100 @@ -18,7 +18,7 @@ %define sover 8 Name: fmt -Version: 8.1.0 +Version: 8.1.1 Release: 0 Summary: A formatting library for C++ License: MIT ++++++ fmt-8.1.0.tar.gz -> fmt-8.1.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/ChangeLog.rst new/fmt-8.1.1/ChangeLog.rst --- old/fmt-8.1.0/ChangeLog.rst 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/ChangeLog.rst 2022-01-06 23:35:15.000000000 +0100 @@ -1,5 +1,24 @@ -8.1.0 - TBD ------------ +8.1.1 - 2022-01-06 +------------------ + +* Restored ABI compatibility with version 8.0.x + (`#2695 <https://github.com/fmtlib/fmt/issues/2695>`_, + `#2696 <https://github.com/fmtlib/fmt/pull/2696>`_). + Thanks `@saraedum (Julian R??th) <https://github.com/saraedum>`_. + +* Fixed chorno formatting on big endian systems + (`#2698 <https://github.com/fmtlib/fmt/issues/2698>`_, + `#2699 <https://github.com/fmtlib/fmt/pull/2699>`_). + Thanks `@phprus (Vladislav Shchapov) <https://github.com/phprus>`_ and + `@xvitaly (Vitaly Zaitsev) <https://github.com/xvitaly>`_. + +* Fixed a linkage error with mingw + (`#2691 <https://github.com/fmtlib/fmt/issues/2691>`_, + `#2692 <https://github.com/fmtlib/fmt/pull/2692>`_). + Thanks `@rbberger (Richard Berger) <https://github.com/rbberger>`_. + +8.1.0 - 2022-01-02 +------------------ * Optimized chrono formatting (`#2500 <https://github.com/fmtlib/fmt/pull/2500>`_, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/doc/build.py new/fmt-8.1.1/doc/build.py --- old/fmt-8.1.0/doc/build.py 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/doc/build.py 2022-01-06 23:35:15.000000000 +0100 @@ -4,7 +4,7 @@ import errno, os, re, sys from subprocess import check_call, CalledProcessError, Popen, PIPE, STDOUT -versions = ['1.0.0', '1.1.0', '2.0.0', '3.0.2', '4.0.0', '4.1.0', '5.0.0', '5.1.0', '5.2.0', '5.2.1', '5.3.0', '6.0.0', '6.1.0', '6.1.1', '6.1.2', '6.2.0', '6.2.1', '7.0.0', '7.0.1', '7.0.2', '7.0.3', '7.1.0', '7.1.1', '7.1.2', '7.1.3', '8.0.0', '8.0.1'] +versions = ['1.0.0', '1.1.0', '2.0.0', '3.0.2', '4.0.0', '4.1.0', '5.0.0', '5.1.0', '5.2.0', '5.2.1', '5.3.0', '6.0.0', '6.1.0', '6.1.1', '6.1.2', '6.2.0', '6.2.1', '7.0.0', '7.0.1', '7.0.2', '7.0.3', '7.1.0', '7.1.1', '7.1.2', '7.1.3', '8.0.0', '8.0.1', '8.1.0', '8.1.1'] class Pip: def __init__(self, venv_dir): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/include/fmt/chrono.h new/fmt-8.1.1/include/fmt/chrono.h --- old/fmt-8.1.0/include/fmt/chrono.h 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/include/fmt/chrono.h 2022-01-06 23:35:15.000000000 +0100 @@ -558,7 +558,15 @@ auto usep = static_cast<unsigned long long>(sep); // Add ASCII '0' to each digit byte and insert separators. digits |= 0x3030003030003030 | (usep << 16) | (usep << 40); - memcpy(buf, &digits, 8); + + constexpr const size_t len = 8; + if (const_check(is_big_endian())) { + char tmp[len]; + memcpy(tmp, &digits, len); + std::reverse_copy(tmp, tmp + len, buf); + } else { + memcpy(buf, &digits, len); + } } template <typename Period> FMT_CONSTEXPR inline const char* get_units() { @@ -1082,7 +1090,7 @@ } template <typename T, FMT_ENABLE_IF(!has_member_data_tm_gmtoff<T>::value)> void format_utc_offset_impl(const T& tm) { -#if defined(_WIN32) +#if defined(_WIN32) && defined(_UCRT) # if FMT_USE_TZSET tzset_once(); # endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/include/fmt/core.h new/fmt-8.1.1/include/fmt/core.h --- old/fmt-8.1.0/include/fmt/core.h 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/include/fmt/core.h 2022-01-06 23:35:15.000000000 +0100 @@ -17,7 +17,7 @@ #include <type_traits> // The fmt library version in the form major * 10000 + minor * 100 + patch. -#define FMT_VERSION 80100 +#define FMT_VERSION 80101 #if defined(__clang__) && !defined(__ibmxl__) # define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) @@ -219,6 +219,20 @@ # endif #endif +#ifndef FMT_DEPRECATED +# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900 +# define FMT_DEPRECATED [[deprecated]] +# else +# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) +# define FMT_DEPRECATED __attribute__((deprecated)) +# elif FMT_MSC_VER +# define FMT_DEPRECATED __declspec(deprecated) +# else +# define FMT_DEPRECATED /* deprecated */ +# endif +# endif +#endif + #ifndef FMT_BEGIN_NAMESPACE # define FMT_BEGIN_NAMESPACE \ namespace fmt { \ @@ -601,7 +615,7 @@ constexpr error_handler(const error_handler&) = default; // This function is intentionally not constexpr to give a compile-time error. - void on_error(const char* message) { throw_format_error(message); } + FMT_NORETURN FMT_API void on_error(const char* message); }; FMT_END_DETAIL_NAMESPACE @@ -1373,21 +1387,20 @@ using cstring_result = conditional_t<std::is_same<char_type, char>::value, const char*, unformattable_pointer>; - // DEPRECATED! - FMT_CONSTEXPR FMT_INLINE auto map(const signed char* val) -> cstring_result { + FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(const signed char* val) + -> cstring_result { return map(reinterpret_cast<const char*>(val)); } - // DEPRECATED! - FMT_CONSTEXPR FMT_INLINE auto map(const unsigned char* val) + FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(const unsigned char* val) -> cstring_result { return map(reinterpret_cast<const char*>(val)); } - // DEPRECATED! - FMT_CONSTEXPR FMT_INLINE auto map(signed char* val) -> cstring_result { + FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(signed char* val) + -> cstring_result { return map(reinterpret_cast<const char*>(val)); } - // DEPRECATED! - FMT_CONSTEXPR FMT_INLINE auto map(unsigned char* val) -> cstring_result { + FMT_DEPRECATED FMT_CONSTEXPR FMT_INLINE auto map(unsigned char* val) + -> cstring_result { return map(reinterpret_cast<const char*>(val)); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/include/fmt/format-inl.h new/fmt-8.1.1/include/fmt/format-inl.h --- old/fmt-8.1.0/include/fmt/format-inl.h 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/include/fmt/format-inl.h 2022-01-06 23:35:15.000000000 +0100 @@ -2575,6 +2575,12 @@ report_error(format_system_error, error_code, message); } +// DEPRECATED! +// This function is defined here and not inline for ABI compatiblity. +FMT_FUNC void detail::error_handler::on_error(const char* message) { + throw_format_error(message); +} + FMT_FUNC std::string vformat(string_view fmt, format_args args) { // Don't optimize the "{}" case to keep the binary size small and because it // can be better optimized in fmt::format anyway. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/include/fmt/format.h new/fmt-8.1.1/include/fmt/format.h --- old/fmt-8.1.0/include/fmt/format.h 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/include/fmt/format.h 2022-01-06 23:35:15.000000000 +0100 @@ -110,20 +110,6 @@ # define FMT_CATCH(x) if (false) #endif -#ifndef FMT_DEPRECATED -# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VER >= 1900 -# define FMT_DEPRECATED [[deprecated]] -# else -# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) -# define FMT_DEPRECATED __attribute__((deprecated)) -# elif FMT_MSC_VER -# define FMT_DEPRECATED __declspec(deprecated) -# else -# define FMT_DEPRECATED /* deprecated */ -# endif -# endif -#endif - #ifndef FMT_MAYBE_UNUSED # if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) # define FMT_MAYBE_UNUSED [[maybe_unused]] @@ -310,10 +296,18 @@ } inline auto is_big_endian() -> bool { +#ifdef _WIN32 + return false; +#elif defined(__BIG_ENDIAN__) + return true; +#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) + return __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__; +#else struct bytes { char data[sizeof(int)]; }; return bit_cast<bytes>(1).data[0] == 0; +#endif } // A fallback implementation of uintptr_t for systems that lack it. @@ -323,7 +317,7 @@ fallback_uintptr() = default; explicit fallback_uintptr(const void* p) { *this = bit_cast<fallback_uintptr>(p); - if (is_big_endian()) { + if (const_check(is_big_endian())) { for (size_t i = 0, j = sizeof(void*) - 1; i < j; ++i, --j) std::swap(value[i], value[j]); } @@ -526,7 +520,7 @@ return next; } -enum { invalid_code_point = ~uint32_t() }; +constexpr uint32_t invalid_code_point = ~uint32_t(); // Invokes f(cp, sv) for every code point cp in s with sv being the string view // corresponding to the code point. cp is invalid_code_point on error. @@ -3044,14 +3038,8 @@ } # endif -/** - DEPRECATED! User-defined literal equivalent of fmt::format. - - **Example**:: - - using namespace fmt::literals; - std::string message = "The answer is {}"_format(42); - */ +// DEPRECATED! +// User-defined literal equivalent of fmt::format. FMT_DEPRECATED constexpr auto operator"" _format(const char* s, size_t n) -> detail::udl_formatter<char> { return {{s, n}}; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/support/manage.py new/fmt-8.1.1/support/manage.py --- old/fmt-8.1.0/support/manage.py 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/support/manage.py 2022-01-06 23:35:15.000000000 +0100 @@ -270,9 +270,9 @@ # Create a release on GitHub. fmt_repo.push('origin', 'release') - params = {'access_token': os.getenv('FMT_TOKEN')} + auth_headers = {'Authorization': 'token ' + os.getenv('FMT_TOKEN')} r = requests.post('https://api.github.com/repos/fmtlib/fmt/releases', - params=params, + headers=auth_headers, data=json.dumps({'tag_name': version, 'target_commitish': 'release', 'body': changes, 'draft': True})) @@ -283,8 +283,8 @@ package = 'fmt-{}.zip'.format(version) r = requests.post( '{}/{}/assets?name={}'.format(uploads_url, id, package), - headers={'Content-Type': 'application/zip'}, - params=params, data=open('build/fmt/' + package, 'rb')) + headers={'Content-Type': 'application/zip'} | auth_headers, + data=open('build/fmt/' + package, 'rb')) if r.status_code != 201: raise Exception('Failed to upload an asset ' + str(r)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/test/core-test.cc new/fmt-8.1.1/test/core-test.cc --- old/fmt-8.1.0/test/core-test.cc 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/test/core-test.cc 2022-01-06 23:35:15.000000000 +0100 @@ -740,10 +740,13 @@ enum class test_scoped_enum {}; TEST(core_test, is_formattable) { +#if 0 + // This should be enabled once corresponding map overloads are gone. static_assert(fmt::is_formattable<signed char*>::value, ""); static_assert(fmt::is_formattable<unsigned char*>::value, ""); static_assert(fmt::is_formattable<const signed char*>::value, ""); static_assert(fmt::is_formattable<const unsigned char*>::value, ""); +#endif static_assert(!fmt::is_formattable<wchar_t>::value, ""); #ifdef __cpp_char8_t static_assert(!fmt::is_formattable<char8_t>::value, ""); @@ -768,11 +771,6 @@ static_assert(!fmt::is_formattable<convertible_to_pointer>::value, ""); - static_assert(!fmt::is_formattable<signed char*, wchar_t>::value, ""); - static_assert(!fmt::is_formattable<unsigned char*, wchar_t>::value, ""); - static_assert(!fmt::is_formattable<const signed char*, wchar_t>::value, ""); - static_assert(!fmt::is_formattable<const unsigned char*, wchar_t>::value, ""); - static_assert(!fmt::is_formattable<void (*)()>::value, ""); struct s; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/test/format-test.cc new/fmt-8.1.1/test/format-test.cc --- old/fmt-8.1.0/test/format-test.cc 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/test/format-test.cc 2022-01-06 23:35:15.000000000 +0100 @@ -1386,22 +1386,6 @@ format_error, "string pointer is null"); } -TEST(format_test, format_schar_string) { - signed char str[] = "test"; - EXPECT_EQ("test", fmt::format("{0:s}", str)); - const signed char* const_str = str; - EXPECT_EQ("test", fmt::format("{0:s}", const_str)); -} - -TEST(format_test, format_uchar_string) { - unsigned char str[] = "test"; - EXPECT_EQ("test", fmt::format("{0:s}", str)); - const unsigned char* const_str = str; - EXPECT_EQ("test", fmt::format("{0:s}", const_str)); - unsigned char* ptr = str; - EXPECT_EQ("test", fmt::format("{0:s}", ptr)); -} - void function_pointer_test(int, double, std::string) {} TEST(format_test, format_pointer) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fmt-8.1.0/test/printf-test.cc new/fmt-8.1.1/test/printf-test.cc --- old/fmt-8.1.0/test/printf-test.cc 2022-01-02 17:34:01.000000000 +0100 +++ new/fmt-8.1.1/test/printf-test.cc 2022-01-06 23:35:15.000000000 +0100 @@ -481,12 +481,6 @@ EXPECT_PRINTF(L" (null)", L"%10s", null_wstr); } -TEST(printf_test, uchar_string) { - unsigned char str[] = "test"; - unsigned char* pstr = str; - EXPECT_EQ("test", fmt::sprintf("%s", pstr)); -} - TEST(printf_test, pointer) { int n; void* p = &n;