Home | History | Annotate | Line # | Download | only in dist
      1 Copyright 1999-2023 Free Software Foundation, Inc.
      2 Contributed by the AriC and Caramba projects, INRIA.
      3 
      4 This file is part of the GNU MPFR Library.
      5 
      6 The GNU MPFR Library is free software; you can redistribute it and/or modify
      7 it under the terms of the GNU Lesser General Public License as published by
      8 the Free Software Foundation; either version 3 of the License, or (at your
      9 option) any later version.
     10 
     11 The GNU MPFR Library is distributed in the hope that it will be useful, but
     12 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     13 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     14 License for more details.
     15 
     16 You should have received a copy of the GNU Lesser General Public License
     17 along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
     18 https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
     19 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
     20 
     21 
     22 
     23                         Installing GNU MPFR
     24                         ===================
     25 
     26 Note: In case of problem, please read this INSTALL file carefully before
     27 reporting a bug, in particular Section "In case of problem" below. Some
     28 problems are due to bad configuration on the user side (not specific to
     29 MPFR).
     30 
     31 0. You first need to install GMP. See <https://gmplib.org/>.
     32    MPFR requires GMP version 5.0.0 or later.
     33    You need a C compiler, preferably GCC, but any reasonable compiler should
     34    work (C++ compilers should work too, under the condition that they do not
     35    break type punning via union).
     36    And you need the standard Unix "make" command, plus some other standard
     37    Unix utility commands.
     38 
     39 1. Extract the files from the archive.
     40 
     41 2. It is strongly advised to apply the latest patches if this has
     42    not been done yet and if patches are available. You can check
     43    on the release page:
     44 
     45      https://www.mpfr.org/mpfr-4.2.1/
     46 
     47    which may have additional information. The patches can be applied
     48    with commands like:
     49 
     50      wget --no-config https://www.mpfr.org/mpfr-4.2.1/allpatches
     51      patch -N -Z -p1 < allpatches
     52 
     53    or
     54 
     55      curl https://www.mpfr.org/mpfr-4.2.1/allpatches | patch -N -Z -p1
     56 
     57    (Those instructions are for the GNU patch command, for example
     58    /usr/bin/gpatch on Solaris.)
     59 
     60 3. In the MPFR directory, to detect your system, type:
     61      ./configure
     62    possibly with options (see below, in particular if this step or
     63    one of the following fails). You should also check whether WARNING
     64    lines have been output (such a problem may cause a failure in one
     65    of the following steps).
     66    Note: paths provided in configure options must always be absolute
     67    (relative paths are not supported).
     68 
     69 4. To build the library, type:
     70      make
     71 
     72    [optional] if you want to tune MPFR for your specific architecture, see
     73    the section "Tuning MPFR" below. Note that for most common architectures,
     74    MPFR includes some default tuning parameters which should be near from
     75    optimal.
     76 
     77 5. To check the built library (runs the test files), type:
     78      make check
     79 
     80    Note: If any test fails, information about this failure can be found in
     81    the tests/test-suite.log file; you should provide this file in your bug
     82    reports (in addition to other useful information, as mentioned later).
     83    If you want the contents of this file to be automatically output in case
     84    of failure, you can set the VERBOSE environment variable to 1 before
     85    running "make check", for instance by typing:
     86      VERBOSE=1 make check
     87 
     88 6. [Optional / experimental] Binary distributions may also want to run:
     89      make check-gmp-symbols
     90 
     91    This will check that MPFR does not use GMP internal symbols, which
     92    could yield failures in case of GMP upgrade without a MPFR rebuild.
     93    But note that this is a heuristic and might give false positives or
     94    false negatives. Please report any problem to the MPFR developers.
     95    End users may also be interested in this check, unless they have
     96    allowed GMP internals with configure options (see below).
     97 
     98 7. To install it (default "/usr/local" | see "--prefix" option), type:
     99      make install
    100 
    101 If you installed MPFR (header and library) in directories that are
    102 not searched by default by the compiler and/or linking tools, then,
    103 like with other libraries, you may need to set up some environment
    104 variables such as C_INCLUDE_PATH (to find the header mpfr.h),
    105 LIBRARY_PATH (to find the library), and if the shared library has
    106 been installed, LD_LIBRARY_PATH (before execution) or LD_RUN_PATH
    107 (before linking); this list is not exhaustive and some environment
    108 variables may be specific to your system. "make install" gives some
    109 instructions; please read them. You can also find more information
    110 in the manuals of your compiler and linker. The MPFR FAQ may also
    111 give some information.
    112 
    113 Remember that if you have several MPFR (or GMP) versions installed
    114 (e.g., one with the system, and one, newer, by you), you will not
    115 necessarily get a compilation/linking error if a wrong library is
    116 used (e.g., because LD_LIBRARY_PATH has not been set correctly).
    117 But unexpected results may occur.
    118 
    119 Under Mac OS X, if the shared library was not installed and you use
    120 Apple's linker (this is the default), you will also need to provide
    121 the -search_paths_first linker flag ("-Wl,-search_paths_first" when
    122 you link via gcc) to make sure that the right library is selected,
    123 as by default, Apple's linker selects a shared library preferably,
    124 even when it is farther in the library paths. We recall that if a
    125 wrong library is selected due to this behavior, unexpected results
    126 may occur.
    127 
    128 
    129 Building the documentation
    130 ==========================
    131 
    132 To build the documentation in various formats, you may first need to
    133 install recent versions of some utilities such as texinfo.
    134 
    135 * Type "make info" to produce the documentation in the info format.
    136 
    137 * Type "make pdf" to produce the documentation in the PDF format.
    138 
    139 * Type "make dvi" to produce the documentation in the DVI format.
    140 
    141 * Type "make ps" to produce the documentation in the PostScript format.
    142 
    143 * Type "make html" to produce the documentation in the HTML format
    144   (in several pages); if you want only one output HTML file, then
    145   type "makeinfo --html --no-split mpfr.texi" from the doc directory
    146   instead.
    147 
    148 
    149 Building MPFR with internal GMP header files
    150 ============================================
    151 
    152 MPFR built with internal GMP header files is a bit faster, so you may want
    153 to build it with them. Just do this in step 1:
    154 
    155   ./configure --with-gmp-build=GMPBUILD
    156 
    157 where GMPBUILD is the GMP build directory. The needed header files are:
    158 gmp-impl.h, longlong.h and all the necessary headers to use them, which
    159 may be located either in the GMP source directory or in the GMP build
    160 directory, in case they are different (MPFR takes care of that, as of
    161 MPFR 3.1.0).
    162 
    163 Warning: the library obtained in this way may use some internal GMP
    164 symbols, and thus dynamically linking your software with a different
    165 version of GMP might fail, even though it is declared as compatible
    166 by Libtool's versioning system.
    167 
    168 
    169 Tuning MPFR
    170 ===========
    171 
    172 [For the current GMP version (6.1.0), a Unix-like OS is required.]
    173 
    174 For this, you need to build MPFR with a GMP build directory (see above).
    175 In the GMP build directory, you also need to go into the "tune" subdirectory
    176 and type "make speed". This will build the GMP speed library, which is used
    177 by the MPFR tuning mechanism.
    178 
    179 Then go back to the MPFR build directory, go into the "tune" subdirectory and
    180 type "make tune". This will build an optimized file "mparam.h" for your
    181 specific architecture.
    182 
    183 
    184 ./configure options
    185 ===================
    186 
    187 --prefix=DIR            installs MPFR headers and library in DIR/include and
    188                         DIR/lib respectively (the default is "/usr/local").
    189 
    190 --with-gmp-include=DIR  assumes that DIR contains gmp.h
    191 --with-gmp-lib=DIR      assumes that DIR contains the GMP library
    192 --with-gmp=DIR          assumes that DIR is where you have installed GMP.
    193                         same as --with-gmp-lib=DIR/lib
    194                         and     --with-gmp-include=DIR/include
    195                         (use either --with-gmp alone or one or both of
    196                         --with-gmp-lib/--with-gmp-include)
    197                         Warning! Do not use these options if you have
    198                         CPPFLAGS and/or LDFLAGS containing a -I or -L
    199                         option with a directory that contains a GMP
    200                         header or library file, as these options just
    201                         add -I and -L options to CPPFLAGS and LDFLAGS
    202                         *after* the ones that are currently declared,
    203                         so that DIR will have a lower precedence. Also,
    204                         this may not work if DIR is a system directory
    205                         (typically /usr or /usr/local); see below.
    206 
    207 --with-gmp-build=DIR    assumes that DIR contains the GMP build directory,
    208                         and enables the use of GMP internals (see above).
    209                         Warning! This option and the group of options
    210                         --with-gmp are mutually exclusive.
    211 
    212 --enable-assert         build MPFR with assertions.
    213 
    214 --enable-thread-safe    build MPFR as thread safe, using compiler-level
    215                         Thread-Local Storage (TLS). Note: TLS support is
    216                         roughly tested by configure. If configure detects
    217                         that TLS does not work (because of the compiler,
    218                         linker or system libraries), it will output an
    219                         error message, telling you to build MPFR without
    220                         thread safe. For instance, though Mac OS X uses
    221                         GCC, it may not currently support GCC's __thread
    222                         storage class.
    223 
    224 --disable-thread-safe   build MPFR without TLS. By default, TLS support
    225                         is detected automatically, and MPFR is built as
    226                         thread safe if supported. However, this detection
    227                         is only a heuristic: TLS can be detected as
    228                         supported while its support is incomplete or
    229                         buggy (MPFR tests may fail). In such a case,
    230                         this option is useful.
    231 
    232 --enable-decimal-float  build conversion functions from/to decimal floats.
    233                         Note that detection by the configure script is
    234                         limited in case of cross-compilation.
    235                         Accepted arguments:
    236                    yes  Decimal support is requested and the configure
    237                         script fails if it detects that decimals do not
    238                         work.
    239                         The encoding (BID or DPD) will automatically be
    240                         detected at configure time or at compile time if
    241                         possible (if not, generic code will be used).
    242                     no  Decimal support is explicitly disabled.
    243                   auto  Decimal support is enabled if the configure script
    244                         detects that it works. This is the default when
    245                         --{enable,disable}-decimal-float is not given.
    246                    bid  Decimal support is requested and the encoding is
    247                         assumed to be BID (some check may be done).
    248                    dpd  Decimal support is requested and the encoding is
    249                         assumed to be DPD (some check may be done).
    250                generic  Decimal support is requested and the generic code
    251                         is used (mainly for developers).
    252 
    253 --enable-gmp-internals  allows the MPFR build to use GMP's undocumented
    254                         functions (not from the public API). Note that
    255                         library versioning is not guaranteed to work if
    256                         this option is used. Thus it must not be used in
    257                         binary distributions.
    258 
    259 --with-sysroot=DIR      Search for dependent libraries within DIR (which
    260                         may be useful in cross-compilation). If you use
    261                         this option, you need to have Libtool 2.4+ on
    262                         the target system. See Libtool 2.4+'s NEWS file.
    263 
    264 Note: By default, the configure script tries to set CC / CFLAGS to GMP's
    265 ones from gmp.h (__GMP_CC / __GMP_CFLAGS) in order to ensure that MPFR is
    266 built with the same ABI as GMP. The reason is that when GMP is built, it
    267 may set CC / CFLAGS to select an ABI that is not the default one in order
    268 to have a better performance. The -pedantic option in GMP's CFLAGS, when
    269 present (which is the case by default), is removed, because the MPFR
    270 build system uses some C extensions (when this script detects that they
    271 are supported) and -pedantic yields too many useless warnings. However,
    272 this setting from GMP is not guaranteed to work as the configure script
    273 does some compiler tests earlier, and a conflict may arise. Also, the
    274 values obtained from GMP may be incorrect for the MPFR build if GMP has
    275 been built on a different machine; in such a case, the user may need to
    276 specify CC / CFLAGS, as explained below.
    277 
    278 Moreover, even without --with-gmp-build and --enable-gmp-internals,
    279 MPFR might use some GMP internals by mistake. This would be a bug,
    280 which should be reported to the MPFR developers.
    281 
    282 Run "./configure --help" to see the other options (default options
    283 from Autoconf and Automake).
    284 
    285 
    286 If 'gmp.h' and 'libgmp' do not match
    287 ====================================
    288 
    289 Under some circumstances, the configure script may output a message
    290 saying:
    291 
    292   'gmp.h' and 'libgmp' seem to have different versions or
    293   we cannot run a program linked with GMP (if you cannot
    294   see the version numbers above). [...]
    295 
    296 Even though the configure script does not fail in such a case, this
    297 message most often indicates a real error, which needs to be avoided.
    298 Possible causes are:
    299 
    300 * The wanted GMP library does not have the same ABI as the one chosen
    301   to build MPFR. The consequences may be:
    302 
    303     - A different GMP library (with the correct ABI) has been found,
    304       but does not have the same version as 'gmp.h'.
    305 
    306     - No other GMP libraries have been found (in this case, no version
    307       numbers should be printed above the warning message).
    308 
    309   This is incorrect and one of the following steps (make, make check)
    310   will probably fail. GMP (actually gmp.h) now provides CC and CFLAGS
    311   information to select the correct ABI, so that this problem should
    312   no longer occur; but if GMP was provided by a binary package, such
    313   information may not be valid. See the
    314 
    315     checking for CC and CFLAGS in gmp.h...
    316 
    317   line in the configure output (about the 11th line) and the following
    318   few ones for more information. You may need to reinstall GMP or to
    319   provide your own CC and/or CFLAGS. See also the remaining of this
    320   INSTALL file.
    321 
    322 * A configure option like --with-gmp or --with-gmp-include was used
    323   with a system include directory, e.g. one of the following:
    324 
    325     --with-gmp=/usr
    326     --with-gmp=/usr/local
    327     --with-gmp-include=/usr/include
    328     --with-gmp-include=/usr/local/include
    329 
    330   GCC (and possibly other compilers) will ignore such a directive for
    331   include directories (but this rule is not applied for the library
    332   itself!). This means that the library search paths will be reordered
    333   as declared, but the specified include directory will still be near
    334   the end of the include search paths (thus with a low precedence).
    335   This is not a problem if only one GMP version is installed, but
    336   otherwise, a wrong gmp.h may be chosen, so that the versions of
    337   gmp.h and libgmp may not match. The suggestions are the following:
    338 
    339     - If you want to use the GMP version under /usr, then you should
    340       uninstall all the other GMP versions (header and library files)
    341       that may be seen in the search paths, in particular those under
    342       /usr/local.
    343 
    344     - If you want to use the GMP version under /usr/local, then you
    345       should uninstall all the other GMP versions (header and library
    346       files) that may be seen in the search paths, but *NOT* the one
    347       under /usr (the version under /usr is provided by the OS vendor,
    348       and changing/removing anything related to it may break your
    349       system, and /usr should have a lower precedence than /usr/local
    350       anyway).
    351 
    352   To find where GMP versions have been installed:
    353 
    354     $ locate libgmp  (if you have a locate database)
    355 
    356   and if the compiler is GCC:
    357 
    358     $ gcc -print-file-name=libgmp.so     (under most systems)
    359     $ gcc -print-file-name=libgmp.dylib  (under Mac OS X)
    360 
    361   and if this does not work, you may try:
    362 
    363     $ gcc -print-search-dirs
    364 
    365 * An official GCC version was used under Debian GNU/Linux. Problems
    366   may come from the fact that Debian chose a different convention
    367   for library search paths concerning 32-bit and 64-bit libraries.
    368   A possible problem can be, for instance:
    369 
    370   [Debian's GCC, correct library path]
    371   $ gcc -print-file-name=libgmp.so
    372   /home/vlefevre/gmp/athlon64/lib/../lib/libgmp.so
    373 
    374   [Official GCC, incorrect library path]
    375   $ gcc-4.3.1 -print-file-name=libgmp.so
    376   /usr/lib/../lib64/libgmp.so
    377 
    378   The solution: use a GCC provided by Debian or add symbolic links
    379   such as lib64 -> lib (on 64-bit machines) for your library paths.
    380 
    381 * The problem may also be temporary and only due to the fact that
    382   libtool could not be used at this time. This is unlikely, though.
    383 
    384 
    385 In case of problem
    386 ==================
    387 
    388 First, look for any warning message in the configure output.
    389 
    390 Several documents may help you to solve the problem:
    391   * this INSTALL file, in particular information given below;
    392   * the FAQ (either the FAQ.html file distributed with MPFR, or the
    393     on-line version <https://www.mpfr.org/faq.html>, which may be more
    394     up-to-date);
    395   * the MPFR web page for this version <https://www.mpfr.org/mpfr-4.2.1/>,
    396     which lists bugs found in this version and provides some patches.
    397 
    398 If the "configure" fails, please check that the C compiler and its
    399 options are the same as those for the GMP build (specially the ABI).
    400 You can see the latter with the following command:
    401 
    402   grep "^CC\|^CFLAGS" GMPBUILD/Makefile
    403 
    404 if the GMP build directory is available. Then type:
    405 
    406   ./configure <configure options> CC=<C compiler> CFLAGS="<compiler options>"
    407 
    408 (quotes are needed when there are spaces or other special characters
    409 in the CC/CFLAGS value) and continue the install. On some platforms,
    410 you should provide further options to match those used by GMP, or set
    411 some environment variables. For instance, see the "Notes on AIX/PowerPC"
    412 section below.
    413 
    414 Warning! Do NOT use optimization options that can change the semantics
    415 of math operations, such as GCC's -ffast-math or Sun CC's -fast.
    416 Otherwise conversions from/to double's may be incorrect on infinities,
    417 NaN's and signed zeros. Since native FP arithmetic is used in a few
    418 places only, such options would not make MPFR faster anyway.
    419 
    420 If some "make check" tests fail, you can try the --disable-thread-safe
    421 configure option (see the configure options above): it has been reported
    422 that some platforms have buggy TLS support. Before trying this option,
    423 you may want to check in the configure output whether MPFR was built
    424 with TLS support; if yes, you will have a line:
    425   checking for TLS support... yes
    426 Alternatively "grep MPFR_USE_THREAD_SAFE config.log" will show that
    427 MPFR_USE_THREAD_SAFE is defined to 1. If it is "no" (or the variable
    428 is not defined), the --disable-thread-safe option would be useless.
    429 
    430 Some tests failure may be due to other compiler bugs, in particular
    431 in optimization code. You can try to build MPFR without compiler
    432 optimizations by giving -O0 (letter O, digit 0) in CFLAGS. If the
    433 MPFR tests no longer fail, this was probably due to a compiler bug,
    434 though we cannot exclude a bug in MPFR. You may want to contact us
    435 (see below), possibly after looking at:
    436   https://members.loria.fr/PZimmermann/software/compilerbugs.html
    437 
    438 On some platforms, try with "gmake" (GNU make) instead of "make".
    439 Problems have been reported with the Tru64 make.
    440 
    441 If the configure script reports that gmp.h version and libgmp version
    442 are different, or if the build was OK, but the tests failed to link
    443 with GMP or gave an error like
    444 
    445   undefined reference to `__gmp_get_memory_functions'
    446 
    447 meaning that the GMP library was not found or a wrong GMP library was
    448 selected by the linker, then your library search paths are probably
    449 not correctly set (some paths are missing or they are specified in an
    450 incorrect order).
    451 
    452 Such problems commonly occur under some GNU/Linux machines, where the
    453 default header and library search paths may be inconsistent: GCC is
    454 configured to search /usr/local/include and /usr/local/lib by default,
    455 while the dynamic linker ignores /usr/local/lib. If you have a GMP
    456 version installed in /usr (provided by the OS vendor) and a new one
    457 installed in /usr/local, then the header of the new GMP version and
    458 the library of the old GMP version will be used! The best solution
    459 is to make sure that the dynamic linker configuration is consistent
    460 with GCC's behavior, for instance by having /usr/local/lib in
    461 /etc/ld.so.conf or in some file from /etc/ld.so.conf.d (as Debian
    462 did: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=395177). See
    463 also https://gcc.gnu.org/legacy-ml/gcc-help/2010-01/msg00171.html for
    464 more information. Alternatively you can use:
    465   * environment variables. This may sometimes be necessary. If DIR
    466     is the installation directory of GMP, add DIR/include to your
    467     CPATH or C_INCLUDE_PATH (for compilers other than GCC, please
    468     check the manual of your compiler), and add DIR/lib to your
    469     LIBRARY_PATH and LD_LIBRARY_PATH (and/or LD_RUN_PATH);
    470   * --with-gmp* configure options (described above), e.g.
    471     --with-gmp=/opt/local (to use /opt/local/include for headers and
    472     /opt/local/lib for libraries), but other software that uses GMP
    473     and/or MPFR will need correct paths too, and environment variables
    474     allow one to set such search paths in a global way.
    475     Note about "--with-gmp=/usr/local". This option may appear to
    476     solve the above inconsistency problem, but does not work as you
    477     expect. Indeed it affects the library search path, in particular,
    478     the one used by the dynamic linker (thus adding the missing
    479     /usr/local/lib directory as wanted), but since /usr/local/include
    480     is a "standard system include directory" for GCC, the include
    481     search patch is not changed; this is often not a problem in this
    482     particular case because usually, /usr/local/include is already
    483     last in the include search patch, but this may fail under some
    484     occasions and may trigger obscure errors.
    485 
    486 For instance, under Unix, where paths are separated by a colon:
    487 
    488   * With POSIX sh-compatible shells (e.g. sh, ksh, bash, zsh):
    489     export C_INCLUDE_PATH="/usr/local/include:/other/path/include"
    490     export LIBRARY_PATH="/usr/local/lib:/other/path/lib"
    491     export LD_LIBRARY_PATH="$LIBRARY_PATH"
    492 
    493   * With csh or tcsh:
    494     setenv C_INCLUDE_PATH "/usr/local/include:/other/path/include"
    495     setenv LIBRARY_PATH "/usr/local/lib:/other/path/lib"
    496     setenv LD_LIBRARY_PATH "$LIBRARY_PATH"
    497 
    498 If almost all the tests fail and the messages in the test-suite.log file
    499 (or in the output, when running individual tests from the command line)
    500 start with a line of the form:
    501 
    502   Incorrect MPFR version! (xxx header vs yyy library)
    503 
    504 then this means that an installed MPFR version is tested instead of the
    505 one that has just been built. This is probably not a bug in MPFR, but a
    506 problem caused by the user or system configuration (particular options,
    507 environment variables, etc.) or a bug in the toolchain. In particular,
    508 if LD_LIBRARY_PATH overrides the run path (set up by libtool) and an
    509 installed ABI-compatible version of MPFR is in a directory listed in
    510 the LD_LIBRARY_PATH search path, then this will break. An example with
    511 GNU ld:
    512 
    513   https://sourceware.org/bugzilla/show_bug.cgi?id=21476
    514 
    515 If you can't solve your problem, you should contact us via the MPFR
    516 mailing-list <mpfr (a] inria.fr>, indicating the machine and operating system
    517 used (uname -a), the compiler and version used (gcc -v if you use gcc),
    518 the configure options used if any (including variables such as CC and
    519 CFLAGS), the version of GMP and MPFR used, and a description of the
    520 problem encountered, in particular the tests/test-suite.log file if
    521 "make check" failed. Please send us also the log of the "configure"
    522 (config.log).
    523 
    524 
    525 Notes about ABI
    526 ===============
    527 
    528 On 64-bit computers, it may happen that the default ABI (Application Binary
    529 Interface) chosen by MPFR does not correspond to the default one chosen by
    530 the compiler.
    531 
    532 In particular, this kind of message may indicate the problem:
    533 /usr/bin/ld: skipping incompatible mpfr/src/.libs/libmpfr.a when searching for -lmpfr
    534 
    535 In fact, since MPFR relies on GMP, it uses the same ABI as GMP.
    536 To be sure that your program compiles and links correctly, use the same
    537 compiler flags as MPFR does (look for CFLAGS in config.log).
    538 
    539 You might also recompile GMP with a different ABI, with for example
    540 ./configure ABI=32.
    541 
    542 
    543 Notes on Mac OS X
    544 =================
    545 
    546 If you get an error of the form
    547 
    548   ld: pointer in read-only segment not allowed in slidable image...
    549 
    550 this can mean that the link is done against a static (GMP) library.
    551 In such a case, you should configure MPFR with --disable-shared to
    552 disable the build of the shared library.
    553 
    554 
    555 Notes on FreeBSD 4.3
    556 ====================
    557 
    558 FreeBSD 4.3 is provided with an incorrect <float.h> header file, and
    559 MPFR tests related to long double's may fail. If you cannot upgrade
    560 the system, you can still use MPFR with FreeBSD 4.3, but you should
    561 not use conversions with the long double type.
    562 
    563 
    564 Notes on AIX/PowerPC
    565 ====================
    566 
    567 The following has been tested on AIX 7.1.3 (gcc111.fsffrance.org)
    568 with gcc 4.8.1 and GMP 6.1.0.
    569 
    570 If GMP was built with the 64-bit ABI, before building and testing MPFR,
    571 you should set the OBJECT_MODE environment variable to 64, e.g., with:
    572 
    573   export OBJECT_MODE=64
    574 
    575 (in a sh-compatible shell). Alternatively add the following to the configure
    576 line: AR="ar -X64" NM="nm -B -X64".
    577 
    578 
    579 Notes on Solaris
    580 ================
    581 
    582 Do not put a -R<dir> option in the LD_OPTIONS environment variable, at least
    583 if the directory <dir> can contain an MPFR library. Otherwise this MPFR
    584 library may be chosen for the tests (make check) instead of the one that has
    585 just been built, in which case, either you will get errors due to unmatched
    586 versions or this problem may remain undetected. The reason is that this
    587 option will appear before the -R options added by libtool, such as the one
    588 to the src/.libs directory containing the MPFR library that has just been
    589 built, and will have the precedence.
    590 
    591 
    592 MPFR for use with Windows Applications
    593 ======================================
    594 
    595 There are several ways of building MPFR on Windows, the most appropriate
    596 approach depending on how you intend to use the resulting libraries.
    597 
    598 a. Using MinGW
    599 ==============
    600 
    601 1 - We advise to use Mingw-w64 (https://www.mingw-w64.org/), which is
    602     simpler and less demanding than Cygwin. Contrary to Cygwin, it also
    603     provides native Windows code.
    604 
    605     If you also use MSYS, you should use "make" for MSYS instead of
    606     the "make" utility from Mingw-w64 or from GCC, which causes the
    607     following error:
    608 
    609       libtool: warning: libobj name 'extract.Tpo -c -o extract.lo extract.lo'
    610       may not contain shell special characters.
    611       rm: unknown option -- c
    612 
    613     References about this issue and solution:
    614       https://sourceforge.net/p/msys2/tickets/223/
    615       https://sympa.inria.fr/sympa/arc/mpfr/2016-07/msg00009.html
    616 
    617 2 - If you just want to make a binary with gcc, there is nothing to do:
    618     GMP, MPFR and the program compile exactly as under Linux. (It is
    619     recommended to pass --build=xxx-yyy-mingw64 to the GMP configure command,
    620     or --build=xxx with xxx containing mingw.)
    621 
    622 3 - To avoid using the Microsoft runtime (which might not be conform to ISO C),
    623     you can use the MinGW runtime package (which is an integral part of MinGW).
    624 
    625     With MinGW version v8.0.0 and later, the formatted output functions
    626     (printf, etc.) are ISO/POSIX-conforming by default; however, this is
    627     no longer true if -std=c89 is used at build time. Conversely, with
    628     earlier MinGW versions, it is possible to get conforming functions
    629     with either '-ansi', '-posix' or '-D__USE_MINGW_ANSI_STDIO'. Note
    630     that if there is a conformity mismatch between the options used for
    631     the GMP build (from which the MPFR build gets the output) and those
    632     used for the MPFR tests, the tsprintf test may fail with one of the
    633     errors below. Be careful that a non-conforming output may yield a
    634     buffer overflow.
    635 
    636     The following applies to old MinGW versions, and may be discouraged
    637     with recent MinGW versions.
    638 
    639     In order to have the MPFR formatted output functions based on an
    640     ISO-conforming printf(), you need to compile GMP (not MPFR) with
    641     CC="gcc -D__USE_MINGW_ANSI_STDIO" (since the standard printf modifiers
    642     %e, %Ld and %td are passed to GMP).
    643 
    644     To avoid failures of some of the printf-related tests, MPFR needs to
    645     be compiled with the same __USE_MINGW_ANSI_STDIO as with GMP, i.e.
    646     this macro should be defined for both or undefined for both; this
    647     should be the case by default, unless CC or CFLAGS has been redefined.
    648     For instance, if __USE_MINGW_ANSI_STDIO is defined in GMP but not in
    649     MPFR, the following error may occur:
    650 
    651       Error in mpfr_vsprintf (s, "%e", ...);
    652       expected: "-1.250000e+000"
    653       got:      "-1.250000e+00"
    654       FAIL tsprintf.exe (exit status: 1)
    655 
    656     and in the opposite case:
    657 
    658       Error in mpfr_vsprintf (s, "%e", ...);
    659       expected: "-1.250000e+00"
    660       got:      "-1.250000e+000"
    661       FAIL tsprintf.exe (exit status: 1)
    662 
    663     Note with old GMP versions: Other issues could arise due to the fact
    664     that the C functions vsnprintf and vsprintf both used internally in
    665     old GMP versions do not produce the same output:
    666 
    667       https://sympa.inria.fr/sympa/arc/mpfr/2016-03/msg00045.html
    668       https://sympa.inria.fr/sympa/arc/mpfr/2016-03/msg00051.html
    669       https://sympa.inria.fr/sympa/arc/mpfr/2016-03/msg00053.html
    670 
    671     If __USE_MINGW_ANSI_STDIO has not been defined when building GMP,
    672     then the length modifiers j, L and t are not supported with the GMP
    673     formatted output functions, and as a consequence, also with MPFR.
    674     This is automatically detected by the configure script, except when
    675     cross-compiling (e.g. under Linux), in which case some macros need
    676     to be defined explicitly, e.g. with
    677 
    678       "CPPFLAGS=-DNPRINTF_J -DNPRINTF_L -DNPRINTF_T"
    679 
    680     in order to avoid potential issues with the MPFR library and failures
    681     in the test suite (the corresponding tests are disabled explicitly).
    682 
    683 b. Using Cygwin
    684 ===============
    685 
    686 This build should be similar to that for MinGW except that the resulting
    687 library depends on the Cygwin DLL and cannot therefore be used with
    688 Visual Studio as with MinGW. Indeed, the binaries compiled with Cygwin
    689 require a dynamic library (cygwin.dll) to work; there is a Cygwin option
    690 -mno-cygwin to build native code, but it may require some non-portable tricks.
    691 
    692 In case of failure, you may need to pass LDFLAGS='-shared-libgcc' at the
    693 end of the configure line due to a bug in GCC. Otherwise, if threading
    694 support is not needed, you can configure MPFR with --disable-thread-safe.
    695 
    696 c. Using Microsoft Visual C++ and Intel C++ Compilers
    697 =====================================================
    698 
    699 Static and dynamic MPFR libraries for the 32- and 64-bit versions of
    700 Windows can be built with Microsoft Visual Studio 2015 using the
    701 Microsoft Visual C++ compiler, see:
    702 
    703   https://visualstudio.microsoft.com/
    704 
    705 The Intel C++ compiler provided as a part of Intel Parallel Studio XE
    706 can also be used:
    707 
    708   https://software.intel.com/en-us/parallel-studio-xe
    709 
    710 The relevant build projects are available here:
    711 
    712   https://github.com/BrianGladman
    713 
    714 d. Using the CompCert compiler
    715 ==============================
    716 
    717 [Tested with CompCert 3.10 and MPFR master-11992-f75b0c388 on x86_64-linux]
    718 
    719 CompCert (https://compcert.org/) is a formally verified compiler.
    720 To compile MPFR with CompCert:
    721 
    722 $ ./configure --disable-shared CC=ccomp CFLAGS="-flongdouble -fstruct-passing"
    723 
    724 You also need to unset LD_LIBRARY_PATH, and/or you might need to change
    725 wl="" into wl="-Wl," in the libtool file (after running configure).
    726 
    727 All tests (make check) should pass (tget_set_d64, tget_set_d128 and
    728 tset_float128 are skipped, since CompCert does not support _Decimal64,
    729 _Decimal128 nor _Float128).
    730 
    731 e. Using the Intel OneApi compiler
    732 ==================================
    733 
    734 When using the Intel OneApi compiler (icx), one should add -fp-model=strict
    735 to CFLAGS so that the conversion routines from/to native floating-point
    736 types (float, double, ...) work properly. Otherwise some tests will fail.
    737