diff options
Diffstat (limited to 'Build/source/libs/mpfr/mpfr-src/configure.ac')
-rw-r--r-- | Build/source/libs/mpfr/mpfr-src/configure.ac | 846 |
1 files changed, 0 insertions, 846 deletions
diff --git a/Build/source/libs/mpfr/mpfr-src/configure.ac b/Build/source/libs/mpfr/mpfr-src/configure.ac deleted file mode 100644 index ea92c1f9716..00000000000 --- a/Build/source/libs/mpfr/mpfr-src/configure.ac +++ /dev/null @@ -1,846 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. - -dnl WARNING! C code starting with # (preprocessor directives) must not -dnl be indented! - -AC_COPYRIGHT([ -Copyright 1999-2020 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 -https://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],[4.1.0]) - -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). -dnl The subdir-objects option is needed due to configuration related to -dnl mini-gmp, which has sources in an external directory. -AM_INIT_AUTOMAKE([1.13 no-define dist-bzip2 dist-xz dist-zip subdir-objects]) -AM_MAINTAINER_MODE(enable) - -AC_CONFIG_MACRO_DIR([m4]) - -dnl Some AC_RUN_IFELSE programs need to be able to return several values -dnl (e.g., in a format detection, one for each possible format). But the -dnl Autoconf manual says: "This exit status might be that of a failed -dnl compilation, or it might be that of a failed program execution." -dnl Unfortunately, we cannot know whether a non-zero exit status comes -dnl from a failed compilation, so that the detection may be incorrect. -dnl Since failures generally occur with a small exit status, the value 77 -dnl is reserved for skipped tests by Autoconf, and values larger than 125 -dnl have special meanings in POSIX[*], good candidates for success are 0 -dnl and values from 80 to 125. -dnl https://tldp.org/LDP/abs/html/exitcodes.html suggests the range 64-113 -dnl but note that /usr/include/sysexits.h now allocates previously unused -dnl exit codes from 64 - 78 (for various kinds of errors). -dnl -dnl Alternatively, the test program could output the result to a file and -dnl return with the 0 exit status if it could do that successfully. -dnl -dnl [*] 2.8.2 Exit Status for Commands -dnl https://pubs.opengroup.org/onlinepubs/9699919799//utilities/V3_chap02.html#tag_18_08_02 - -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]) - -unset gmp_lib_path GMP_CFLAGS GMP_CC - -dnl ******************************************************************** -dnl Extra arguments to configure (AC_ARG_WITH and AC_ARG_ENABLE) - -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(mini_gmp, - [ --with-mini-gmp=DIR use mini-gmp (sources in DIR) instead of GMP - (experimental, please read doc/mini-gmp file)], - [ - MPFR_PARSE_DIRECTORY(["$withval"],[withval]) - if test -z "$gmp_lib_path" && test -z "$with_gmp_include" && \ - test -z "$use_gmp_build"; then - if test -f "$withval/mini-gmp.c" && test -f "$withval/mini-gmp.h"; then - AC_DEFINE([MPFR_USE_MINI_GMP],1,[Use mini-gmp]) - mini_gmp_path="$withval" - AC_SUBST(mini_gmp_path) - else - AC_MSG_FAILURE([mini-gmp.{c,h} not found in $withval]) - fi - else - AC_MSG_FAILURE([Do not use --with-mini-gmp 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 all simple assertions]) ;; - none) AC_DEFINE([MPFR_WANT_ASSERT],-1,[Do no want any assertion]) ;; - no) ;; - full) AC_DEFINE([MPFR_WANT_ASSERT],2,[Want full assertions]) ;; - *) AC_MSG_ERROR([bad value for --enable-assert: yes, no, none or full]) ;; - esac]) - -AC_ARG_ENABLE(logging, - [ --enable-logging enable MPFR logging (needs nested functions - and the 'cleanup' attribute) [[default=no]]], - [ case $enableval in - yes) AC_DEFINE([MPFR_USE_LOGGING],1,[Enable MPFR logging support]) ;; - 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(shared-cache, - [ --enable-shared-cache enable use of caches shared by all threads, - for all MPFR constants. It usually makes MPFR - dependent on PTHREAD [[default=no]]], - [ case $enableval in - yes) - AC_DEFINE([MPFR_WANT_SHARED_CACHE],1,[Want shared cache]) ;; - no) ;; - *) AC_MSG_ERROR([bad value for --enable-shared-cache: 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 - [[for developers]] enable timeout for test programs - (NUM seconds, <= 9999) [[default=no]]; if this is - enabled, the environment 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]) - -AC_ARG_ENABLE(tune-for-coverage, - [ --enable-tune-for-coverage - [[for developers]] tune MPFR for coverage tests], - [ case $enableval in - no) ;; - yes) AC_DEFINE([MPFR_TUNE_COVERAGE], 1, [tune for coverage]) ;; - *) AC_MSG_ERROR([bad value for --enable-tune-for-coverage]) ;; - esac]) - -dnl Support for _Decimal64 and _Decimal128 (ISO/IEC TS 18661). -dnl See acinclude.m4 for more information and tests. -dnl FIXME: differentiate the support of _Decimal64 and _Decimal128, e.g. -dnl --enable-decimal64 for _Decimal64 -dnl --enable-decimal128 for _Decimal128 -dnl --enable-decimal-float would explicitly enable both (or fail). -dnl --disable-decimal-float would explicitly disable both. -AC_ARG_ENABLE(decimal-float, - [ --disable-decimal-float explicitly disable decimal floats support - --enable-decimal-float build conversion functions from/to decimal floats - (see INSTALL file for details) [[default=auto]]], - [ case $enableval in - yes|no|auto|bid|dpd|generic) ;; - *) AC_MSG_ERROR([bad value for --enable-decimal-float]) ;; - esac]) - -dnl Warning! Not to be confused with _Decimal128. Thus it is better -dnl to say binary128 in the description. It can correspond to either -dnl _Float128 (ISO/IEC TS 18661) or __float128 (old type name). -AC_ARG_ENABLE(float128, - [ --disable-float128 explicitly disable binary128 support - --enable-float128 build conversion functions from/to binary128 - (_Float128 or __float128) [[default=autodetect]]], - [ case $enableval in - yes) ;; - no) ;; - *) AC_MSG_ERROR([bad value for --enable-float128: yes or no]) ;; - esac]) - -AC_ARG_ENABLE(debug-prediction, - [ --enable-debug-prediction - [[for developers]] enable debug of branch prediction - (for x86 and x86-64 with GCC, static libs)], - [ case $enableval in - yes) if test "$enable_shared" != no; then - AC_MSG_ERROR([--enable-debug-prediction can only work in static mode (--disable-shared)]) - fi - AC_DEFINE([MPFR_DEBUG_PREDICTION],1, - [Enable debug of branch prediction]) ;; - no) ;; - *) AC_MSG_ERROR([bad value for --enable-debug-prediction: yes or no]) ;; - esac]) - -AC_ARG_ENABLE(lto, - [ --enable-lto build MPFR with link-time-optimization - (experimental) [[default: no]]], - [ case $enableval in - yes) if test "$enable_shared" != "no"; then - AC_MSG_ERROR([--enable-lto can only work in static mode (--disable-shared)]) - fi - enable_lto=yes - ;; - no) ;; - *) AC_MSG_ERROR([bad value for --enable-lto: yes or no]) ;; - esac]) - -AC_ARG_ENABLE(formally-proven-code, - [ --enable-formally-proven-code - use formally proven code when available - (needs a C99 compiler) [[default=no]]], - [ case $enableval in - yes) AC_DEFINE([MPFR_WANT_PROVEN_CODE],1,[Want formally proven code]) ;; - no) ;; - *) AC_MSG_ERROR([bad value for --enable-formally-proven-code: yes or no]) ;; - esac]) - -dnl Makefile.am files can use "if MINI_GMP" / ... / "endif". -AM_CONDITIONAL([MINI_GMP], [test -n "$mini_gmp_path"]) - -dnl First, detect incompatibilities between the above configure options. -AC_MSG_CHECKING([whether configure options are compatible]) -if test "$enable_logging" = yes; then - if test "$enable_thread_safe" = yes; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([enable either logging or thread-safe, not both]) - fi -dnl The following test is done only to output a specific error message, -dnl as there would otherwise be an error due to enable_thread_safe=no. - if test "$enable_shared_cache" = yes; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([shared cache does not work with logging support]) - fi - enable_thread_safe=no -fi -if test "$enable_shared_cache" = yes; then - if test "$enable_thread_safe" = no; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([shared cache needs thread-safe support]) - fi - enable_thread_safe=yes -fi -AC_MSG_RESULT([yes]) - - -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. - -dnl We do not do this check if mini-gmp is used. - -if test -z "$user_redefine_cc" && \ - test "$cross_compiling" != yes && \ - test "${with_mini_gmp+set}" != set ; 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. -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. However, note that this won't - # work if GCC has been installed with versioned names only (e.g. - # with cpp-5 and gcc-5). - for cpp in "cpp -P" "cpp" "gcc -P -E" "gcc -E" "/lib/cpp -P" "/lib/cpp" "cc -P -E" "cc -E" "c99 -P -E" "c99 -E" "clang -E" "cl -E" "icl -E" - do - # Get CC - echo "#include \"gmp.h\"" > conftest.c - echo "MPFR_OPTION __GMP_CC" >> conftest.c - $cpp $CPPFLAGS conftest.c 2> /dev/null > conftest.txt - test $? -ne 0 && continue - GMP_CC=`$EGREP MPFR_OPTION conftest.txt | $SED -e 's/MPFR_OPTION //g;s/ *" *//g'` - # Get CFLAGS - echo "#include \"gmp.h\"" > conftest.c - echo "MPFR_OPTION __GMP_CFLAGS" >> conftest.c - $cpp $CPPFLAGS conftest.c 2> /dev/null > conftest.txt - test $? -ne 0 && continue - [GMP_CFLAGS=`$EGREP MPFR_OPTION conftest.txt | $SED -e 's/[ "]-pedantic[ "]/ /g;s/MPFR_OPTION //g;s/ *" *//g'`] - break - done - rm -f conftest* - if test "x$GMP_CC" = "x__GMP_CC" || test "x$GMP_CFLAGS" = "x__GMP_CFLAGS" ; then - AC_MSG_RESULT(failed) - GMP_CFLAGS= - GMP_CC= - else - AC_MSG_RESULT([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 AM_PROG_AR is needed so that ar-lib (wrapper for Microsoft lib.exe) -dnl gets installed by "automake -i" (if absent, "automake --warnings=all" -dnl gives a warning). -AM_PROG_AR - -dnl This must done before MPFR_CONFIGS. -LT_INIT(win32-dll) - -dnl Warning: This test is *only* for CFLAGS settings. -dnl If the compiler is ICC, add some specific flags, except on MS-Windows. -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. -dnl * Now use -mieee-fp instead of -mp (ICC 13 says: option '-mp' is -dnl deprecated and will be removed in a future release.). According -dnl to "icc -help", both options are equivalent; it also suggests -dnl to use -fp-model <arg> instead of -mp, but what is <arg>? Anyway -dnl -mieee-fp solves the tset_d failure due to a negative zero. This -dnl option has been introduced in ICC 9.0 for Linux (2005-06): -dnl http://www.ncsa.illinois.edu/UserInfo/Resources/Software/Intel/Compilers/9.0/C_ReleaseNotes.htm -AC_MSG_CHECKING(for non-MS-Windows ICC) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ -#if (!defined(__ICC) && !defined(__INTEL_COMPILER)) || defined(_WIN32) -# error "Not a non-MS-Windows ICC" -error -#endif -]], [[]])],[ - AC_MSG_RESULT(yes) - CFLAGS="-fp_port -mieee-fp -wd1572 -wd265 -wd186 -wd239 $CFLAGS" -],[AC_MSG_RESULT(no)]) - -dnl If CFLAGS has not been set explicitly and the compiler is GCC, then -dnl use some specific flags. But don't touch user other flags. -dnl Note: This is done even when CFLAGS has been set from GMP's CFLAGS -dnl (__GMP_CFLAGS macro in gmp.h) above. The consequence is that this -dnl might yield a compilation failure if the -Werror option appears in -dnl __GMP_CFLAGS. But in this case, since -Werror is not used by default, -dnl one may expect that the user would also set CFLAGS for MPFR. -dnl Note: When the compiler is GCC not in C++ mode, -Wc++-compat may be -dnl interesting, but it has been introduced in GCC 4.1 only. -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 -dnl Determine the endianness of integer. But since MPFR doesn't use -dnl AC_CONFIG_HEADERS, configure cannot provide such information for -dnl universal binaries containing variants with different endianness -dnl (i.e. generic code must be used). -AC_C_BIGENDIAN([AC_DEFINE(HAVE_BIG_ENDIAN)],[AC_DEFINE(HAVE_LITTLE_ENDIAN)], -[true],[true]) - -# (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 Under Linux, make sure that the old dtags are used if LD_LIBRARY_PATH -dnl is defined. The issue is that with the new dtags, LD_LIBRARY_PATH has -dnl the precedence over the run path, so that if a compatible MPFR library -dnl is installed in some directory from $LD_LIBRARY_PATH, then the tested -dnl MPFR library will be this library instead of the MPFR library from the -dnl build tree. Other OS with the same issue might be added later. -dnl -dnl References: -dnl https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=859732 -dnl http://lists.gnu.org/archive/html/libtool/2017-05/msg00000.html -dnl -dnl We need to check whether --disable-new-dtags is supported as alternate -dnl linkers may be used (e.g., with tcc: CC=tcc LD=tcc). -dnl -case $host in - *-*-linux*) - if test -n "$LD_LIBRARY_PATH"; then - saved_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -Wl,--disable-new-dtags" - AC_MSG_CHECKING(whether --disable-new-dtags is supported by the linker) - AC_LINK_IFELSE([AC_LANG_SOURCE([[ -int main (void) { return 0; } - ]])], - [AC_MSG_RESULT(yes (use it since LD_LIBRARY_PATH is set))], - [AC_MSG_RESULT(no) - LDFLAGS="$saved_LDFLAGS" - ]) - fi - ;; -esac - -dnl MPFR_CONFIGS uses LDFLAGS, thus must be invoked after LDFLAGS has -dnl been determined completely. -MPFR_CONFIGS - -dnl -dnl For mpfr-longlong.h - TODO: should be replaced (see acinclude.m4). -dnl - -GMP_C_ATTRIBUTE_MODE - - -dnl -dnl Setup related to GMP / mini-gmp -dnl - -if test -z "$mini_gmp_path" ; then - -dnl Setup for GMP - -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. -dnl -dnl The DLL version (the number in libmpfr-*.dll.def below) must be the -dnl version of the oldest supported interface (i.e. CURRENT - AGE in -dnl src/Makefile.am). -AC_SUBST(MPFR_LDFLAGS) -AC_SUBST(LIBMPFR_LDFLAGS) -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-6.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([libgmp isn't provided as 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([libgmp is provided as a DLL: use --disable-static --enable-shared]) ]) - fi - ;; -esac - -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 <https://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 < 500) -# error "GMP 5.0.0 or newer is required" -error -#endif - ]])],[AC_MSG_RESULT(yes)],[ - AC_MSG_RESULT(no) - AC_MSG_ERROR([GMP 5.0.0 or newer is 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 (this problem with -dnl GMP 4.1 is no longer possible as we now require GMP 5.0.0 or newer, -dnl but the same kind of problem may occur in the future). -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.]) -]) - -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 -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); - fflush (stdout); - /* Also put information in config.log (stderr) */ - fprintf (stderr, "gmp.h: %s / libgmp: %s\n", 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 - MPFR_CHECK_PRINTF_GROUPFLAG], - [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). Another]) - AC_MSG_WARN([cause may be that LD_RUN_PATH is not honored (problem]) - AC_MSG_WARN([seen under OpenBSD 6.6).]) - 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 __gmpn_sbpi1_divappr_q 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). -AC_CHECK_FUNCS([__gmpn_sbpi1_divappr_q]) -dnl same for other GMP internal functions -AC_CHECK_FUNCS([__gmpn_invert_limb]) -dnl mpn_rsblsh1_n(rp, up, vp, n) does {rp, n} <- 2 * {vp, n} - {up, n} -AC_CHECK_FUNCS([__gmpn_rsblsh1_n]) - -MPFR_CHECK_MP_LIMB_T_VS_LONG -MPFR_CHECK_MP_LIMB_T_VS_INTMAX - -else - -dnl Setup for mini-gmp - -dnl Let us make the configure script clean up the mini-gmp.* files -dnl and add the symbolic links to mini-gmp.{c,h} instead of relying -dnl on timestamp-based make rules, which may not work when testing -dnl several mini-gmp versions (whose source can go back in time). -mpfr_build_src="${ac_top_build_prefix}src" -mkdir -p "$mpfr_build_src" -rm -f -- "$mpfr_build_src"/mini-gmp.* -for i in c h -do - ln -s -- "$mini_gmp_path/mini-gmp.$i" "$mpfr_build_src/mini-gmp.$i" -done - -dnl First check whether mini-gmp defines GMP_NUMB_BITS. If it doesn't, -dnl then guess the value from the size of mp_limb_t. -AC_MSG_CHECKING(for GMP_NUMB_BITS) -how="from mini-gmp.h" -saved_CPPFLAGS="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS -I$mpfr_build_src" -AC_COMPUTE_INT(mini_gmp_numb_bits, [(GMP_NUMB_BITS)], - [#include <mini-gmp.h>], - [how="not in mini-gmp.h; guessed" - AC_COMPUTE_INT(mini_gmp_numb_bits, [(sizeof(mp_limb_t) * CHAR_BIT)], - [#include <limits.h> - #include <mini-gmp.h>], - [AC_MSG_FAILURE([cannot define GMP_NUMB_BITS])]) - AC_DEFINE_UNQUOTED([GMP_NUMB_BITS], $mini_gmp_numb_bits, [number of bits in a limb]) - ]) -CPPFLAGS="$saved_CPPFLAGS" -AC_MSG_RESULT([$mini_gmp_numb_bits bits ($how)]) - -dnl We need to check the availability of lrand48 (used by random_limb) -dnl and srand48 (used by gmp_randseed_ui), in particular because these -dnl functions are not part of the ISO C standard. -AC_CHECK_FUNC(lrand48,,AC_MSG_FAILURE([MPFR + mini-gmp requires lrand48])) -AC_CHECK_FUNC(srand48,,AC_MSG_FAILURE([MPFR + mini-gmp requires srand48])) - -fi - -dnl End of setup related to GMP / mini-gmp - -dnl The getrusage function is needed for MPFR bench (cf tools/bench) -AC_CHECK_FUNCS([getrusage]) - -dnl Remove also many macros (AC_DEFINE), which are unused by MPFR and -dnl pollute (and slow down because libtool has to parse them) the build. -if test -f confdefs.h; then - for i in PACKAGE_ HAVE_STRING HAVE_DLFCN_H HAVE_MEM STDC_HEADERS \ - HAVE_STDLIB_H HAVE_UNISTD_H HAVE_STDC_HEADERS \ - HAVE_SYS_STAT_H HAVE_SYS_TYPES_H PROTOTYPES __PROTOTYPES - do - $SED "/#define $i/d" < confdefs.h > confdefs.tmp - mv confdefs.tmp confdefs.h - done -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 mpfr.pc doc/Makefile src/Makefile tests/Makefile tune/Makefile src/mparam.h:src/mparam_h.in tools/bench/Makefile]) -AC_OUTPUT - -dnl NEWS README AUTHORS Changelog |