Squashed 'third_party/boostorg/math/' content from commit 0e9549f

Change-Id: I7c2a13cb6a5beea4a471341510d8364cedd71613
git-subtree-dir: third_party/boostorg/math
git-subtree-split: 0e9549ff2f854e6edafaf4627d65026f2f533a18
diff --git a/config/Jamfile.v2 b/config/Jamfile.v2
new file mode 100644
index 0000000..a63ea38
--- /dev/null
+++ b/config/Jamfile.v2
@@ -0,0 +1,46 @@
+# copyright John Maddock 2008
+# Distributed under the Boost Software License, Version 1.0. 
+# (See accompanying file LICENSE_1_0.txt or copy at 
+# http://www.boost.org/LICENSE_1_0.txt.
+
+import modules ;
+import path ;
+
+local ntl-path = [ modules.peek : NTL_PATH ] ;
+local gmp_path = [ modules.peek : GMP_PATH ] ;
+local e_float_path = [ modules.peek : E_FLOAT_PATH ] ;
+
+lib quadmath ;
+lib fftw3 ;
+lib fftw3f ;
+lib fftw3l ;
+lib fftw3q ;
+
+obj has_long_double_support : has_long_double_support.cpp ;
+obj has_mpfr_class : has_mpfr_class.cpp :
+      <include>$(gmp_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx ;
+obj has_mpreal : has_mpreal.cpp :
+      <include>$(gmp_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/mpfrc++ ;
+obj has_ntl_rr : has_ntl_rr.cpp : <include>$(ntl-path)/include ;
+obj has_gmpxx : has_gmpxx.cpp :
+      <include>$(gmp_path) <include>$(gmp_path)/mpfr <include>$(gmp_path)/gmpfrxx ;
+obj has_gcc_visibility : has_gcc_visibility.cpp :
+      <toolset>gcc:<cxxflags>-fvisibility=hidden <toolset>gcc:<cxxflags>-Werror ;
+obj has_e_float : has_e_float.cpp : <include>$(e_float_path) ;
+exe has_float128 : has_float128.cpp quadmath ;
+exe has_fftw3 : has_fftw3.cpp fftw3 fftw3f fftw3l ;
+exe has_intel_quad : has_intel_quad.cpp : <cxxflags>-Qoption,cpp,--extended_float_type ;
+obj has_128bit_floatmax_t : has_128bit_floatmax_t.cpp ;
+
+explicit has_long_double_support ;
+explicit has_mpfr_class ;
+explicit has_mpreal ;
+explicit has_ntl_rr ;
+explicit has_gmpxx ;
+explicit has_gcc_visibility ;
+explicit has_e_float ;
+explicit has_float128 ;
+explicit has_intel_quad ;
+explicit has_128bit_floatmax_t ;
+explicit has_fftw3 ;
+
diff --git a/config/has_128bit_floatmax_t.cpp b/config/has_128bit_floatmax_t.cpp
new file mode 100644
index 0000000..aee4837
--- /dev/null
+++ b/config/has_128bit_floatmax_t.cpp
@@ -0,0 +1,19 @@
+//  Copyright John Maddock 2014.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/cstdfloat.hpp>
+#include <boost/static_assert.hpp>
+
+#ifndef BOOST_FLOAT128_C
+#error "There is no 128 bit floating point type"
+#endif
+
+BOOST_STATIC_ASSERT(sizeof(boost::floatmax_t) * CHAR_BIT == 128);
+
+int main()
+{
+   return 0;
+}
+
diff --git a/config/has_e_float.cpp b/config/has_e_float.cpp
new file mode 100644
index 0000000..1f3b305
--- /dev/null
+++ b/config/has_e_float.cpp
@@ -0,0 +1,15 @@
+//  Copyright John Maddock 2011.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifdef _MSC_VER
+#  pragma warning (disable : 4100) // unreferenced formal parameter
+#endif
+
+#define E_FLOAT_TYPE_EFX
+
+#include <e_float/e_float.h>
+#include <functions/functions.h>
+
diff --git a/config/has_fftw3.cpp b/config/has_fftw3.cpp
new file mode 100644
index 0000000..8045685
--- /dev/null
+++ b/config/has_fftw3.cpp
@@ -0,0 +1,19 @@
+//  Copyright John Maddock 2017.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <fftw3.h>
+
+int main()
+{
+   fftwq_plan plan;  // early versions don't have this it seems.
+
+   fftw_cleanup();
+   fftwf_cleanup();
+   fftwl_cleanup();
+
+
+   return 0;
+}
+
diff --git a/config/has_float128.cpp b/config/has_float128.cpp
new file mode 100644
index 0000000..60a2e2e
--- /dev/null
+++ b/config/has_float128.cpp
@@ -0,0 +1,17 @@
+//  Copyright John Maddock 2013.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+extern "C" {
+#include <quadmath.h>
+}
+
+int main()
+{
+   __float128 f = -2.0Q;
+   f = fabsq(f);
+
+   return 0;
+}
+
diff --git a/config/has_gcc_visibility.cpp b/config/has_gcc_visibility.cpp
new file mode 100644
index 0000000..6c7d6f9
--- /dev/null
+++ b/config/has_gcc_visibility.cpp
@@ -0,0 +1,13 @@
+//  Copyright John Maddock 20010.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef __GNUC__
+# error "This is a GCC specific test case".
+#endif
+
+int main()
+{
+   return 0;
+}
diff --git a/config/has_gmpxx.cpp b/config/has_gmpxx.cpp
new file mode 100644
index 0000000..edf62d8
--- /dev/null
+++ b/config/has_gmpxx.cpp
@@ -0,0 +1,7 @@
+//  Copyright John Maddock 2008.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <gmpxx.h>
+
diff --git a/config/has_intel_quad.cpp b/config/has_intel_quad.cpp
new file mode 100644
index 0000000..a2db80c
--- /dev/null
+++ b/config/has_intel_quad.cpp
@@ -0,0 +1,16 @@
+//  Copyright John Maddock 2013.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+extern "C" _Quad __fabs(_Quad);
+
+int main()
+{
+   _Quad f = -2.0Q;
+   f = __fabsq(f);
+
+   return 0;
+}
+
+
diff --git a/config/has_long_double_support.cpp b/config/has_long_double_support.cpp
new file mode 100644
index 0000000..d314cf3
--- /dev/null
+++ b/config/has_long_double_support.cpp
@@ -0,0 +1,10 @@
+//  Copyright John Maddock 2008.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#include <boost/math/tools/config.hpp>
+
+#ifdef BOOST_MATH_NO_LONG_DOUBLE_MATH_FUNCTIONS
+#error "long double support is not supported by Boost.Math on this Plaform: the long double version of the TR1 library will not be built."
+#endif
diff --git a/config/has_mpfr_class.cpp b/config/has_mpfr_class.cpp
new file mode 100644
index 0000000..376b022
--- /dev/null
+++ b/config/has_mpfr_class.cpp
@@ -0,0 +1,15 @@
+//  Copyright John Maddock 2008.
+//  Copyright Paul A. Britow 2009
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+#  pragma warning (disable : 4127) // conditional expression is constant
+#  pragma warning (disable : 4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning)
+#  pragma warning (disable : 4512) // assignment operator could not be generated
+#endif
+
+#include <cstddef>
+#include <gmpfrxx.h>
+
diff --git a/config/has_mpreal.cpp b/config/has_mpreal.cpp
new file mode 100644
index 0000000..8ee8897
--- /dev/null
+++ b/config/has_mpreal.cpp
@@ -0,0 +1,14 @@
+//  Copyright John Maddock 2008.
+//  Copyright Paul A. Britow 2009
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#ifdef _MSC_VER
+#  pragma warning (disable : 4127) // conditional expression is constant
+#  pragma warning (disable : 4800) // 'int' : forcing value to bool 'true' or 'false' (performance warning)
+#  pragma warning (disable : 4512) // assignment operator could not be generated
+#endif
+
+#include <mpreal.h>
+
diff --git a/config/has_ntl_rr.cpp b/config/has_ntl_rr.cpp
new file mode 100644
index 0000000..f384421
--- /dev/null
+++ b/config/has_ntl_rr.cpp
@@ -0,0 +1,12 @@
+//  Copyright John Maddock 2008.
+//  Use, modification and distribution are subject to the
+//  Boost Software License, Version 1.0. (See accompanying file
+//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+
+#ifdef _MSC_VER
+#  pragma warning (disable : 4100) // unreferenced formal parameter
+#endif
+
+#include <NTL/RR.h>
+