summaryrefslogtreecommitdiff
path: root/mpfr/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'mpfr/configure.ac')
-rw-r--r--mpfr/configure.ac634
1 files changed, 634 insertions, 0 deletions
diff --git a/mpfr/configure.ac b/mpfr/configure.ac
new file mode 100644
index 0000000000..41a3e1750f
--- /dev/null
+++ b/mpfr/configure.ac
@@ -0,0 +1,634 @@
+dnl Process this file with autoconf to produce a configure script.
+
+AC_COPYRIGHT([
+Copyright 1999-2016 Free Software Foundation, Inc.
+Contributed by the AriC and Caramba projects, INRIA.
+
+This file is part of the GNU MPFR Library.
+
+The GNU MPFR Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published
+by the Free Software Foundation; either version 3 of the License, or (at
+your option) any later version.
+
+The GNU MPFR Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
+License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
+http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+])
+
+dnl Add check-news when it checks for more than 15 lines
+AC_INIT([MPFR],[3.1.5])
+
+dnl Older Automake versions than 1.13 may still be supported, but no longer
+dnl tested, and many things have changed in 1.13. Moreover the INSTALL file
+dnl and MPFR manual assume that MPFR has been built using Automake 1.13+
+dnl (due to parallel tests, introduced by default in Automake 1.13).
+AM_INIT_AUTOMAKE([1.13 no-define dist-bzip2 dist-xz dist-zip])
+AM_MAINTAINER_MODE(enable)
+
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl FIXME: The AC_ARG_ENABLE(decimal-float...) part does things too
+dnl early, even when this option is not used. In particular, it must
+dnl be put after AC_PROG_CC; another problem is that the GMP CFLAGS
+dnl and CC check may modify the compiler.
+
+test_CFLAGS=${CFLAGS+set}
+
+dnl Check if user request its CC and CFLAGS
+if test -n "$CFLAGS" || test -n "$CC" ; then
+ user_redefine_cc=yes
+fi
+
+dnl Basic Autoconf macros. At this point, they must not make Autoconf
+dnl choose a compiler because of the CC and CFLAGS setup from gmp.h!
+
+AC_CANONICAL_HOST
+
+AC_PROG_EGREP
+AC_PROG_SED
+
+dnl To use a separate config header.
+dnl There is still some problem with GMP's HAVE_CONFIG
+dnl AC_CONFIG_HEADERS([mpfrconf.h:mpfrconf.in])
+
+dnl Extra arguments to configure
+unset gmp_lib_path GMP_CFLAGS GMP_CC
+AC_ARG_WITH(gmp_include,
+ [ --with-gmp-include=DIR GMP include directory ],
+ MPFR_PARSE_DIRECTORY(["$withval"],[withval])
+ CPPFLAGS="$CPPFLAGS -I$withval")
+AC_ARG_WITH(gmp_lib,
+ [ --with-gmp-lib=DIR GMP lib directory ], [
+ MPFR_PARSE_DIRECTORY(["$withval"],[withval])
+ LDFLAGS="$LDFLAGS -L$withval"
+ gmp_lib_path="$withval"
+ ])
+AC_ARG_WITH(gmp,
+ [ --with-gmp=DIR GMP install directory ], [
+ MPFR_PARSE_DIRECTORY(["$withval"],[withval])
+ if test -z "$with_gmp_lib" && test -z "$with_gmp_include" ; then
+ CPPFLAGS="$CPPFLAGS -I$withval/include"
+ LDFLAGS="$LDFLAGS -L$withval/lib"
+ gmp_lib_path="$withval/lib"
+ else
+ AC_MSG_FAILURE([Do not use --with-gmp and --with-gmp-include/--with-gmp-lib options simultaneously.])
+ fi
+ ])
+
+AC_ARG_WITH(gmp_build,
+ [ --with-gmp-build=DIR GMP build directory (please read INSTALL file)],
+ [
+ MPFR_PARSE_DIRECTORY(["$withval"],[withval])
+ if test -z "$gmp_lib_path" && test -z "$with_gmp_include" ; then
+ CPPFLAGS="$CPPFLAGS -I$withval -I$withval/tune"
+ LDFLAGS="$LDFLAGS -L$withval -L$withval/.libs -L$withval/tune"
+ gmp_lib_path="$withval$PATH_SEPARATOR$withval/.libs$PATH_SEPARATOR$withval/tune"
+ if test -r $withval/Makefile ; then
+ GMP_CFLAGS=`$SED -n 's/^CFLAGS = //p' $withval/Makefile`
+ GMP_CC=`$SED -n 's/^CC = //p' $withval/Makefile`
+ GMP_SOURCE=`$SED -n 's/^srcdir = *//p' $withval/Makefile`
+ case "$GMP_SOURCE" in
+ .) GMP_SOURCE="" ;;
+ /*) ;;
+ ?*) GMP_SOURCE="$withval/$GMP_SOURCE" ;;
+ esac
+ if test -d "$GMP_SOURCE" ; then
+ CPPFLAGS="$CPPFLAGS -I$GMP_SOURCE -I$GMP_SOURCE/tune"
+ fi
+ fi
+ use_gmp_build=yes
+ else
+ AC_MSG_FAILURE([Do not use --with-gmp-build and other --with-gmp options simultaneously.])
+ fi
+ ])
+
+AC_ARG_WITH(mulhigh_size,
+ [ --with-mulhigh-size=NUM internal threshold table for mulhigh],
+ AC_DEFINE_UNQUOTED([MPFR_MULHIGH_SIZE],$withval, [Mulhigh size]))
+
+AC_ARG_ENABLE(gmp-internals,
+ [ --enable-gmp-internals enable use of GMP undocumented functions [[default=no]]],
+ [ case $enableval in
+ yes) AC_DEFINE([WANT_GMP_INTERNALS],1,[Want GMP internals]) ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value for --enable-gmp-internals: yes or no]) ;;
+ esac])
+
+AC_ARG_ENABLE(assert,
+ [ --enable-assert enable ASSERT checking [[default=no]]],
+ [ case $enableval in
+ yes) AC_DEFINE([MPFR_WANT_ASSERT],1,[Want assertion]) ;;
+ no) ;;
+ full) AC_DEFINE([MPFR_WANT_ASSERT],2,[Want assertion]) ;;
+ *) AC_MSG_ERROR([bad value for --enable-assert: yes, no or full]) ;;
+ esac])
+AC_ARG_ENABLE(logging,
+ [ --enable-logging enable MPFR logging (the system must support it)
+ [[default=no]]],
+ [ case $enableval in
+ yes) AC_DEFINE([MPFR_USE_LOGGING],1,[Log what MPFR does]) ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value for --enable-logging: yes or no]) ;;
+ esac])
+AC_ARG_ENABLE(thread-safe,
+ [ --disable-thread-safe explicitly disable TLS support
+ --enable-thread-safe build MPFR as thread safe, i.e. with TLS support
+ (the system must support it) [[default=autodetect]]],
+ [ case $enableval in
+ yes) ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value for --enable-thread-safe: yes or no]) ;;
+ esac])
+AC_ARG_ENABLE(warnings,
+ [ --enable-warnings allow MPFR to output warnings to stderr [[default=no]]],
+ [ case $enableval in
+ yes) AC_DEFINE([MPFR_USE_WARNINGS],1,[Allow MPFR to output warnings to stderr]) ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value for --enable-warnings: yes or no]) ;;
+ esac])
+
+AC_ARG_ENABLE(tests-timeout,
+ [ --enable-tests-timeout=NUM enable timeout (NUM seconds) for test programs
+ (NUM <= 9999) [[default=no]]; if enabled, env variable
+ $MPFR_TESTS_TIMEOUT overrides NUM (0: no timeout).],
+ [ case $enableval in
+ no) ;;
+ yes) AC_DEFINE([MPFR_TESTS_TIMEOUT], 0, [timeout limit]) ;;
+ [[0-9]]|[[0-9]][[0-9]]|[[0-9]][[0-9]][[0-9]]|[[0-9]][[0-9]][[0-9]][[0-9]])
+ AC_DEFINE_UNQUOTED([MPFR_TESTS_TIMEOUT], $enableval, [timeout limit]) ;;
+ *) AC_MSG_ERROR([bad value for --enable-tests-timeout]) ;;
+ esac])
+
+
+dnl
+dnl Setup CC and CFLAGS
+dnl
+
+dnl ********************************************************************
+dnl Check for CC and CFLAGS in gmp.h
+
+dnl Warning! The following tests must be done before Autoconf selects
+dnl a compiler. This means that some macros such as AC_PROG_CC and
+dnl AM_PROG_AR must be put after the following code.
+
+if test -z "$user_redefine_cc" && test "$cross_compiling" != yes ; then
+
+dnl We need to guess the C preprocessor instead of using AC_PROG_CPP,
+dnl since AC_PROG_CPP implies AC_PROG_CC, which chooses a compiler
+dnl (before we have the chance to get it from gmp.h) and does some
+dnl checking related to this compiler (such as dependency tracking
+dnl options); if the compiler changes due to __GMP_CC in gmp.h, one
+dnl would have incorrect settings.
+dnl FIXME: Move this in aclocal ?
+if test -z "$GMP_CC$GMP_CFLAGS" ; then
+ AC_MSG_CHECKING(for CC and CFLAGS in gmp.h)
+ GMP_CC=__GMP_CC
+ GMP_CFLAGS=__GMP_CFLAGS
+ # /lib/cpp under Solaris doesn't support some environment variables
+ # used by GCC, such as C_INCLUDE_PATH. If the user has set up such
+ # environment variables, he probably wants to use them. So, let us
+ # prefer cpp and gcc to /lib/cpp.
+ for cpp in cpp gcc /lib/cpp cc c99
+ do
+ case $cpp in
+ *cpp*) ;;
+ *) cpp="$cpp -E" ;;
+ esac
+ echo foo > conftest.c
+ if $cpp $CPPFLAGS conftest.c > /dev/null 2> /dev/null ; then
+ # Get CC
+ echo "#include \"gmp.h\"" > conftest.c
+ echo "MPFR_OPTION __GMP_CC" >> conftest.c
+ GMP_CC=`$cpp $CPPFLAGS conftest.c 2> /dev/null | $EGREP MPFR_OPTION | $SED -e 's/MPFR_OPTION //g;s/ *" *//g'`
+ # Get CFLAGS
+ echo "#include \"gmp.h\"" > conftest.c
+ echo "MPFR_OPTION __GMP_CFLAGS" >> conftest.c
+ unset rmpedantic
+ [test "$enable_logging" = yes && rmpedantic='s/[ "]-pedantic[ "]/ /g;']
+ GMP_CFLAGS=`$cpp $CPPFLAGS conftest.c 2> /dev/null | $EGREP MPFR_OPTION | $SED -e "$rmpedantic"'s/MPFR_OPTION //g;s/ *" *//g'`
+ break
+ fi
+ done
+ rm -f conftest*
+ if test "x$GMP_CC" = "x__GMP_CC" || test "x$GMP_CFLAGS" = "x__GMP_CFLAGS" ; then
+ AC_MSG_RESULT(no)
+ GMP_CFLAGS=
+ GMP_CC=
+ else
+ AC_MSG_RESULT(yes [CC=$GMP_CC CFLAGS=$GMP_CFLAGS])
+ fi
+fi
+
+dnl But these variables may be invalid, so we must check them first.
+dnl Note: we do not use AC_RUN_IFELSE, as it implies AC_PROG_CC.
+if test -n "$GMP_CC$GMP_CFLAGS" ; then
+ AC_MSG_CHECKING(for CC=$GMP_CC and CFLAGS=$GMP_CFLAGS)
+ echo "int main (void) { return 0; }" > conftest.c
+ if $GMP_CC $GMP_CFLAGS -o conftest conftest.c 2> /dev/null ; then
+ AC_MSG_RESULT(yes)
+ CFLAGS=$GMP_CFLAGS
+ CC=$GMP_CC
+ else
+ AC_MSG_RESULT(no)
+ fi
+ rm -f conftest*
+fi
+
+fi
+
+dnl ********************************************************************
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_LANG(C)
+
+dnl Support unusual archivers.
+AM_PROG_AR
+
+dnl For GCC, _Decimal64 was introduced in GCC 4.3 for some targets
+dnl (note that it is not guaranteed to be available because it may
+dnl be disabled in the GCC build). See:
+dnl https://gcc.gnu.org/gcc-4.3/changes.html
+dnl _Decimal64 is not yet defined in GCC for C++:
+dnl https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51364
+dnl _Decimal64 support is broken with GCC 4.6.3 and 4.7.2 on powerpc64
+dnl with the mode32 ABI, e.g. "-m32 -mpowerpc64 -mtune=970 -O3"; this
+dnl is detected by the x != x test below.
+AC_ARG_ENABLE(decimal-float,
+ [ --enable-decimal-float build conversion functions from/to decimal floats
+ [[default=no]]],
+ [ case $enableval in
+ yes) AC_DEFINE([MPFR_WANT_DECIMAL_FLOATS],1,
+ [Build decimal float functions])
+ AC_MSG_CHECKING(if compiler knows _Decimal64)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[_Decimal64 x;]])],
+ [AC_MSG_RESULT(yes)
+ if test "$use_gmp_build" != yes ; then
+ AC_MSG_ERROR([decimal float support requires --with-gmp-build])
+ fi
+ AC_MSG_CHECKING(if _GMP_IEEE_FLOATS is defined)
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#include "gmp.h"
+#include "gmp-impl.h"
+#ifndef _GMP_IEEE_FLOATS
+#error "_GMP_IEEE_FLOATS is not defined"
+#endif]])],[AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)
+ AC_MSG_ERROR([decimal float support requires _GMP_IEEE_FLOATS])])
+ ],
+ [AC_MSG_RESULT(no)
+AC_MSG_ERROR([Compiler doesn't know _Decimal64 (ISO/IEC TR 24732).
+Please use another compiler or build MPFR without --enable-decimal-float.])]
+ )
+ AC_MSG_CHECKING(decimal float format)
+ AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stdlib.h>
+]], [[
+volatile _Decimal64 x = 1;
+union { double d; _Decimal64 d64; } y;
+if (x != x) return 3;
+y.d64 = 1234567890123456.0dd;
+return y.d == 0.14894469406741037E-123 ? 0 :
+ y.d == 0.59075095508629822E-68 ? 1 : 2;
+]])], [AC_MSG_RESULT(DPD)
+ AC_DEFINE([DPD_FORMAT],1,[])],
+ [case "$?" in
+ 1) AC_MSG_RESULT(BID) ;;
+ 2) AC_MSG_FAILURE(neither DPD nor BID) ;;
+ 3) AC_MSG_FAILURE([_Decimal64 support is broken.
+Please use another compiler or build MPFR without --enable-decimal-float.]) ;;
+ *) AC_MSG_FAILURE(internal error) ;;
+ esac],
+ [AC_MSG_RESULT(assuming DPD)
+ AC_DEFINE([DPD_FORMAT],1,[])])
+ ;;
+ no) ;;
+ *) AC_MSG_ERROR([bad value for --enable-decimal-float: yes or no]) ;;
+ esac])
+
+dnl Check if compiler is ICC, and if such a case, disable GCC
+dnl And add some specific flags.
+dnl Don't add Warnings Flags (Otherwise you'll get more than 20000 warnings).
+dnl Add -long_double flags? Don't use -pc64 !
+dnl Notes (VL):
+dnl * With icc 10.1 20080212 on itanium, the __ICC macro is not defined,
+dnl even when the -icc option is used (contrary to what is documented
+dnl on the icc man page).
+dnl * When ICC is correctly detected (__ICC macro defined), unsetting
+dnl the GCC variable confuses libtool. See:
+dnl https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=485421
+dnl * If need be, the gcc predefined macros __GNUC_* can be disabled
+dnl thanks to the -no-gcc option.
+AC_MSG_CHECKING(for ICC)
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#if !defined(__ICC)
+# error "ICC Not Found"
+error
+#endif
+]], [[]])],[
+ AC_MSG_RESULT(yes)
+ CFLAGS="-fp_port -mp -wd1572 -wd265 -wd186 -wd239 $CFLAGS"
+],[AC_MSG_RESULT(no)])
+
+dnl If compiler is gcc, then use some specific flags.
+dnl But don't touch user other flags.
+if test "$test_CFLAGS" != set && test -n "$GCC"; then
+ CFLAGS="-Wpointer-arith $CFLAGS"
+ AC_MSG_CHECKING(whether the selected language is C++)
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#if defined (__cplusplus)
+# error "C++"
+error
+#endif
+ ]], [[]])],[
+ AC_MSG_RESULT(no)
+ CFLAGS="-Wmissing-prototypes $CFLAGS"
+ ],[
+ AC_MSG_RESULT(yes)
+ CFLAGS="-Wmissing-declarations -Wno-sign-compare $CFLAGS"
+ ])
+ CFLAGS="-Wall $CFLAGS"
+fi
+
+AM_PROG_CC_C_O
+
+case $host in
+ *-apple-darwin*)
+dnl This allows to take the first GMP library in the library paths,
+dnl whether it is dynamic or static. This behavior is more sensible,
+dnl in particular because it is the only way to link with a version
+dnl only available in static form when another version is available
+dnl in dynamic, and also for consistency, because the compiler will
+dnl take the first gmp.h found in the include paths (so, we need to
+dnl take a library that corresponds to this header file). This is a
+dnl common problem with darwin.
+ MPFR_LD_SEARCH_PATHS_FIRST ;;
+esac
+
+AC_C_CONST
+AC_C_VOLATILE
+MPFR_CONFIGS
+
+# (Based on GMP 5.1)
+# clock_gettime is in librt on *-*-osf5.1 and on glibc < 2.17, so add -lrt to
+# TUNE_LIBS if needed (e.g. if clock_gettime is not already in the C library).
+# On linux (tested on x86_32, 2.6.26), clock_getres reports ns accuracy,
+# while in a quick test on osf, clock_getres said only 1 millisecond.
+old_LIBS="$LIBS"
+AC_SEARCH_LIBS(clock_gettime, rt, [
+ AC_DEFINE([HAVE_CLOCK_GETTIME],1,[Define to 1 if you have the `clock_gettime' function])])
+TUNE_LIBS="$LIBS"
+LIBS="$old_LIBS"
+AC_SUBST(TUNE_LIBS)
+
+dnl
+dnl Setup GMP detection
+dnl
+
+dnl Check GMP Header
+AC_MSG_CHECKING(for gmp.h)
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#include "gmp.h"
+]])],[AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([gmp.h can't be found, or is unusable.])
+])
+
+dnl Configs for Windows DLLs.
+dnl libtool requires "-no-undefined" for win32 dll
+dnl
+dnl "-Wl,output-def" is used to get a .def file for use by MS lib to make
+dnl a .lib import library, described in the manual.
+dnl
+dnl Incidentally, libtool does generate an import library libmpfr.dll.a,
+dnl but it's "ar" format and cannot be used by the MS linker. There
+dnl doesn't seem to be any GNU tool for generating or converting to .lib.
+AC_SUBST(MPFR_LDFLAGS)
+AC_SUBST(LIBMPFR_LDFLAGS)
+LT_INIT(win32-dll)
+case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ AC_MSG_CHECKING(for DLL/static GMP)
+ if test "$enable_shared" = yes; then
+ MPFR_LDFLAGS="$MPFR_LDFLAGS -no-undefined"
+ LIBMPFR_LDFLAGS="$LIBMPFR_LDFLAGS -Wl,--output-def,.libs/libmpfr-4.dll.def"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include "gmp.h"
+#if !__GMP_LIBGMP_DLL
+# error "Dead man"
+error
+#endif
+ ]], [[]])],[AC_MSG_RESULT(DLL)],[
+ AC_MSG_RESULT(static)
+ AC_MSG_ERROR([gmp.h isn't a DLL: use --enable-static --disable-shared]) ])
+ else
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include "gmp.h"
+#if __GMP_LIBGMP_DLL
+# error "Dead man"
+error
+#endif
+ ]], [[]])],[AC_MSG_RESULT(static)],[
+ AC_MSG_RESULT(DLL)
+ AC_MSG_ERROR([gmp.h is a DLL: use --disable-static --enable-shared]) ])
+ fi
+ ;;
+esac
+
+
+dnl
+dnl For mpfr-longlong.h - TODO: should be replaced (see acinclude.m4).
+dnl
+
+GMP_C_ATTRIBUTE_MODE
+
+
+dnl
+dnl Setup GMP detection (continued)
+dnl
+
+dnl Check minimal GMP version
+dnl We only guarantee that with a *functional* and recent enough GMP version,
+dnl MPFR will compile; we do not guarantee that GMP will compile.
+dnl In particular fat builds are broken in GMP 4.3.2 and GMP 5.0.0
+dnl (at least on 64-bit Core 2 under Linux),
+dnl see http://gmplib.org/list-archives/gmp-bugs/2011-August/002345.html.
+AC_MSG_CHECKING(for recent GMP)
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+#include "gmp.h"
+#if (__GNU_MP_VERSION*100+__GNU_MP_VERSION_MINOR*10 < 410)
+# error "min GMP version is 4.1.0"
+error
+#endif
+]])],[AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([GMP 4.1.0 min required])
+])
+
+dnl Check if gmp.h is usable at link time; this may detect errors such as
+dnl with GMP 4.1, which uses "extern __inline__" unconditionally with all
+dnl GCC versions, which breaks by default with GCC 5.
+dnl Note: No linking is done against the GMP library at this time, as we
+dnl do not use any GMP symbol. The goal of this test is to avoid obscure
+dnl errors with the following gmp.h tests.
+AC_MSG_CHECKING(usable gmp.h at link time)
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include "gmp.h"
+]],[[]])],[AC_MSG_RESULT(yes)],[
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([There is an incompatibility between gmp.h and the compiler.
+See 'config.log' for details.
+Such an incompatibility is known between GMP 4.1, which uses
+"extern __inline__" with all GCC versions, and GCC 5.])
+])
+
+dnl Check if we can use internal header files of GMP (only --with-gmp-build)
+if test "$use_gmp_build" = yes ; then
+ AC_MSG_CHECKING(for gmp internal files)
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
+ #include "gmp.h"
+ #include "gmp-impl.h"
+ #include "longlong.h"
+ ]])],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE([MPFR_HAVE_GMP_IMPL],1,[Use GMP Internal Files])
+ ],[
+ AC_MSG_ERROR([header files gmp-impl.h and longlong.h not found])
+ ])
+fi
+
+dnl Check for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency.
+dnl Problems may occur if gmp.h was generated with some ABI
+dnl and is used with another ABI (or if nails are used).
+dnl This test doesn't need to link with libgmp (at least it shouldn't).
+AC_MSG_CHECKING(for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency)
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <limits.h>
+#include "gmp.h"
+]], [[
+ if (GMP_NUMB_BITS == sizeof(mp_limb_t) * CHAR_BIT)
+ return 0;
+ fprintf (stderr, "GMP_NUMB_BITS = %ld\n", (long) GMP_NUMB_BITS);
+ fprintf (stderr, "sizeof(mp_limb_t) = %ld\n", (long) sizeof(mp_limb_t));
+ fprintf (stderr, "sizeof(mp_limb_t) * CHAR_BIT = %ld != GMP_NUMB_BITS\n",
+ (long) (sizeof(mp_limb_t) * CHAR_BIT));
+ return 1;
+]])], [AC_MSG_RESULT(yes)], [
+ AC_MSG_RESULT(no)
+ AC_MSG_ERROR([GMP_NUMB_BITS and sizeof(mp_limb_t) are not consistent.
+You probably need to change some of the GMP or MPFR compile options.
+See 'config.log' for details (search for GMP_NUMB_BITS).])],
+ [AC_MSG_RESULT([cannot test])])
+
+
+dnl Check if we can link with GMP
+AC_CHECK_LIB(gmp, __gmpz_init, [LIBS="-lgmp $LIBS"],
+ [AC_MSG_ERROR(libgmp not found or uses a different ABI (including static vs shared).
+Please read the INSTALL file -- see "In case of problem".)])
+
+dnl Check for corresponding 'gmp.h' and libgmp.a
+AC_MSG_CHECKING(if gmp.h version and libgmp version are the same)
+dnl We do not set LD_LIBRARY_PATH, as it is not possible to set it just
+dnl before the test program is run, and we do not want to affect other
+dnl programs (such as the compiler), because the behavior could be
+dnl incorrect and even have security implications.
+dnl WARNING! LD_RUN_PATH is not taken into account by the GNU gold ld,
+dnl e.g. from binutils-gold 2.22-5 under Debian; see
+dnl https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=660813
+saved_LD_RUN_PATH="$LD_RUN_PATH"
+LD_RUN_PATH="${LD_RUN_PATH:+$LD_RUN_PATH$PATH_SEPARATOR}$gmp_lib_path"
+export LD_RUN_PATH
+AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <stdio.h>
+#include <string.h>
+#include "gmp.h"
+]], [[
+ char buffer[100];
+ sprintf (buffer, "%d.%d.%d", __GNU_MP_VERSION, __GNU_MP_VERSION_MINOR,
+ __GNU_MP_VERSION_PATCHLEVEL);
+ printf ("(%s/%s) ", buffer, gmp_version);
+ if (strcmp (buffer, gmp_version) == 0)
+ return 0;
+ if (__GNU_MP_VERSION_PATCHLEVEL != 0)
+ return 1;
+ sprintf (buffer, "%d.%d", __GNU_MP_VERSION, __GNU_MP_VERSION_MINOR);
+ return (strcmp (buffer, gmp_version) != 0) ? 1 : 0;
+]])],
+ [AC_MSG_RESULT(yes)
+ MPFR_CHECK_GMP
+ MPFR_CHECK_DBL2INT_BUG
+ MPFR_CHECK_PRINTF_SPEC],
+ [AC_MSG_RESULT(no)
+ AC_MSG_WARN([==========================================================])
+ AC_MSG_WARN(['gmp.h' and 'libgmp' seem to have different versions or])
+ AC_MSG_WARN([we cannot run a program linked with GMP (if you cannot])
+ AC_MSG_WARN([see the version numbers above). A cause may be different])
+ AC_MSG_WARN([GMP versions with different ABI's or the use of --with-gmp])
+ AC_MSG_WARN([or --with-gmp-include with a system include directory])
+ AC_MSG_WARN([(such as /usr/include or /usr/local/include).])
+ AC_MSG_WARN([However since we can't use 'libtool' inside the configure,])
+ AC_MSG_WARN([we can't be sure. See 'config.log' for details.])
+ AC_MSG_WARN([CC="$CC"])
+ AC_MSG_WARN([CFLAGS="$CFLAGS"])
+ AC_MSG_WARN([CPPFLAGS="$CPPFLAGS"])
+ AC_MSG_WARN([LDFLAGS="$LDFLAGS"])
+ AC_MSG_WARN([LIBS="$LIBS"])
+ AC_MSG_WARN([Temporary LD_RUN_PATH was "$LD_RUN_PATH".])
+ AC_MSG_WARN([==========================================================])
+ ],AC_MSG_RESULT([cannot test])
+)
+LD_RUN_PATH="$saved_LD_RUN_PATH"
+
+dnl Warning! __gmpn_rootrem is an internal GMP symbol; thus its behavior
+dnl may change or this symbol may be removed in the future (without being
+dnl handled by the library versioning system, which is even worse, as this
+dnl can mean undetected incompatibilities in case of GMP library upgrade,
+dnl without rebuilding MPFR). So, this symbol must not be used, unless
+dnl WANT_GMP_INTERNALS is defined. Only the GMP public API should be used
+dnl by default, in particular by binary distributions. Moreover the check
+dnl below may yield an incorrect result as libtool isn't used in configure
+dnl (see above).
+dnl Same for __gmpn_sbpi1_divappr_q.
+AC_CHECK_FUNCS([__gmpn_rootrem __gmpn_sbpi1_divappr_q])
+
+dnl Remove also many MACROS (AC_DEFINE) which are unused by MPFR
+dnl and polluate (and slow down because libtool has to parse them) the build.
+if test -f confdefs.h; then
+ $SED '/#define PACKAGE_/d' <confdefs.h >confdefs.tmp
+ $SED '/#define HAVE_STRING/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_ALLOCA /d' <confdefs.h >confdefs.tmp
+ $SED '/#define HAVE_DLFCN_H/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_MEM/d' <confdefs.h >confdefs.tmp
+ $SED '/#define STDC_HEADERS/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_STRTOL/d' <confdefs.h >confdefs.tmp
+ $SED '/#define HAVE_STDLIB_H/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_UNISTD_H/d' <confdefs.h >confdefs.tmp
+ $SED '/#define HAVE_STDC_HEADERS/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_LONG_DOUBLE/d' <confdefs.h >confdefs.tmp
+ $SED '/#define HAVE_SYS_STAT_H/d' <confdefs.tmp >confdefs.h
+ $SED '/#define HAVE_SYS_TYPES_H/d' <confdefs.h >confdefs.tmp
+ $SED '/#define PROTOTYPES/d' <confdefs.tmp >confdefs.h
+ $SED '/#define __PROTOTYPES/d' <confdefs.h >confdefs.tmp
+
+ mv confdefs.tmp confdefs.h
+fi
+
+if $EGREP -q -e '-dev$' $srcdir/VERSION; then
+ AC_SUBST([DATAFILES])dnl
+ DATAFILES=`echo \`$SED -n \
+ 's/^ *data_check *("\(data\/[[^"]]*\)".*/tests\/\1/p' \
+ $srcdir/tests/*.c\``
+fi
+
+dnl Output
+AC_CONFIG_FILES([Makefile doc/Makefile src/Makefile tests/Makefile tune/Makefile src/mparam.h:src/mparam_h.in])
+AC_OUTPUT
+
+dnl NEWS README AUTHORS Changelog