From 76947a8be529d1ee4b05d2987bb84e60f35231e9 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sat, 15 Feb 2020 21:59:24 -0800 Subject: [PATCH] boost: reintroduce uClibc-ng patch It's all fixed upstream. Backported a combination of three patches. Signed-off-by: Rosen Penev --- libs/boost/Makefile | 2 +- libs/boost/patches/004-uclibc-math.patch | 39 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 libs/boost/patches/004-uclibc-math.patch diff --git a/libs/boost/Makefile b/libs/boost/Makefile index e2ecdff920..217f6eae55 100644 --- a/libs/boost/Makefile +++ b/libs/boost/Makefile @@ -13,7 +13,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=boost PKG_VERSION:=1.71.0 PKG_SOURCE_VERSION:=1_71_0 -PKG_RELEASE:=5 +PKG_RELEASE:=6 PKG_SOURCE:=$(PKG_NAME)_$(PKG_SOURCE_VERSION).tar.bz2 PKG_SOURCE_URL:=@SF/$(PKG_NAME)/$(PKG_NAME)/$(PKG_VERSION) https://dl.bintray.com/boostorg/release/$(PKG_VERSION)/source/ diff --git a/libs/boost/patches/004-uclibc-math.patch b/libs/boost/patches/004-uclibc-math.patch new file mode 100644 index 0000000000..da329959ac --- /dev/null +++ b/libs/boost/patches/004-uclibc-math.patch @@ -0,0 +1,39 @@ +--- a/boost/math/tools/roots.hpp ++++ b/boost/math/tools/roots.hpp +@@ -796,12 +796,24 @@ Complex complex_newton(F g, Complex guess, int max_iterations=std::numeric_limit + // https://stackoverflow.com/questions/48979861/numerically-stable-method-for-solving-quadratic-equations/50065711 + namespace detail + { ++#if defined(BOOST_GNU_STDLIB) && !defined(_GLIBCXX_USE_C99_MATH_TR1) ++inline float fma_workaround(float x, float y, float z) { return ::fmaf(x, y, z); } ++inline double fma_workaround(double x, double y, double z) { return ::fma(x, y, z); } ++#ifndef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS ++inline long double fma_workaround(long double x, long double y, long double z) { return ::fmal(x, y, z); } ++#endif ++#endif + template + inline T discriminant(T const & a, T const & b, T const & c) + { + T w = 4*a*c; ++#if defined(BOOST_GNU_STDLIB) && !defined(_GLIBCXX_USE_C99_MATH_TR1) ++ T e = fma_workaround(-c, 4*a, w); ++ T f = fma_workaround(b, b, -w); ++#else + T e = std::fma(-c, 4*a, w); + T f = std::fma(b, b, -w); ++#endif + return f + e; + } + } +@@ -809,7 +821,11 @@ namespace detail + template + auto quadratic_roots(T const& a, T const& b, T const& c) + { ++#if defined(BOOST_GNU_STDLIB) && !defined(_GLIBCXX_USE_C99_MATH_TR1) ++ using boost::math::copysign; ++#else + using std::copysign; ++#endif + using std::sqrt; + if constexpr (std::is_integral::value) + { -- 2.30.2