Home | History | Annotate | only in /src/external/lgpl3/mpfr/dist/doc
Up to higher level directory
NameDateSize
check-typography05-Mar-20231.5K
FAQ.html05-Mar-202318K
fdl.texi26-Sep-202020.7K
Makefile.am05-Mar-20231,012
Makefile.in05-Mar-202325.6K
mini-gmp05-Mar-20232.7K
mpfr.info01-Jul-2024277.8K
mpfr.texi01-Jul-2024227.5K
README.dev01-Jul-202482.9K
texinfo.tex05-Mar-2023368.8K

README.dev

      1 Copyright 2002-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 Notes for the MPFR developers and Git users
     23 ===========================================
     24 
     25 To compile the source code obtained from the repository or after applying
     26 some special patches, you need some additional GNU development utilities:
     27 aclocal, autoheader, automake, autoconf 2.60 (at least), and libtoolize.
     28 The AX_PTHREAD macro from autoconf-archive[*] is now included in the MPFR
     29 repository (m4/ax_pthread.m4).
     30 [*] https://www.gnu.org/software/autoconf-archive/ax_pthread.html
     31 
     32 As some files like "configure" are not part of the Git repository, you
     33 first need to run "autoreconf -i" (or ./autogen.sh, which could be used
     34 later to update the config files). Then you can run ./configure in the
     35 usual way (see the INSTALL file, but note that there are no patches to
     36 apply, and the URLs are not valid since the corresponding version has
     37 not been released yet).
     38 
     39 To generate mpfr.info, you need texinfo version 4.2 (or higher).
     40 
     41 ===========================================================================
     42 
     43 The VERSION file contains the number of the next release version, i.e.
     44 the version currently being developed. A suffix can be attached for the
     45 development versions (in general, "-dev") or pre-release versions (e.g.
     46 "-rc1"). It must be updated with the update-version script. Examples:
     47 
     48   tools/update-version 3 1 0 dev
     49   tools/update-version 3 1 0 rc1
     50   tools/update-version 3 1 0
     51 
     52 The "-dev" suffix means that additional tests may be done or required
     53 for development. For instance, the data files from the tests/data
     54 directory are required; such files are not included in tarballs as
     55 they can be large.
     56 
     57 If nightly snapshots are built, the date in the yyyymmdd format and/or
     58 some Git information (for more accurate information) must be added to
     59 the version as a suffix, for instance: "2.3.0-20070621".
     60 
     61 Patches can be tracked by adding a chunk of the form
     62 
     63 --- PATCHES~    Tue Nov  6 19:59:33 2001
     64 +++ PATCHES     Tue Nov  6 19:59:42 2001
     65 @@ -1,0 +1 @@
     66 +<your-id-here>
     67 
     68 to the patch file[*]. After such patches have been applied, the file
     69 src/get_patches.c providing the mpfr_get_patches() function will be
     70 rebuilt by "make". MPFR distributors can still modify the version
     71 suffix from the applied patches according to their version naming
     72 scheme; for instance, for their own patches, MPFR developers do:
     73 
     74   tools/update-version 3 1 0 p1 -
     75 
     76 [*] This idea comes from Thomas Roessler, who implemented it in Mutt.
     77 
     78 For patches from MPFR developers, e.g. for MPFR 3.1.0:
     79 1. Unarchive the tarball: a directory mpfr-3.1.0 is created.
     80 2. Go into this directory (cd mpfr-3.1.0).
     81 3. Apply the current patches with "patch -N -Z -p1 < /path/to/allpatches".
     82 4. Reset the PATCHES file with "true >| PATCHES".
     83 5. Rename mpfr-3.1.0 as mpfr-3.1.0-a and duplicate it as mpfr-3.1.0-b
     84    without changing the timestamps (e.g. with cp -a).
     85 6. In mpfr-3.1.0-b, apply the patch obtained with "git diff", e.g.
     86      patch --no-backup-if-mismatch -p0 < /path/to/new_patch
     87    If an autotools file has been modified, run "autoreconf" and remove
     88    the autom4te.cache directory.
     89 7. In mpfr-3.1.0-b, update the version information:
     90      tools/update-version 3 1 0 p<n> -
     91    where <n> is the patch number.
     92 8. In mpfr-3.1.0-b, update PATCHES file: echo >> PATCHES <patch_name>
     93 9. Make the patch: TZ=UTC0 diff -Naurd mpfr-3.1.0-a mpfr-3.1.0-b
     94 
     95 The tools/build-patch script can be used to ease the process.
     96 
     97 Note: if autotools files are modified, the corresponding changes in the
     98 distributed files depending on them must be included in the patch, and
     99 the timestamps of such autotools files should be reset so that they do
    100 not change when the patch is applied with the -Z option. Otherwise the
    101 autotools would be needed to build MPFR (unless maintainer mode is
    102 disabled).
    103 
    104 Patches are put under the www directory of the misc.git repository for
    105 the MPFR website.
    106 
    107 ===========================================================================
    108 
    109 When submitting patches, unified diffs (option -u) are recommended,
    110 as they are more readable. You can also use the option -d to generate
    111 a smaller set of changes. See diff(1) for more information.
    112 
    113 ===========================================================================
    114 
    115 Copyright Notices: For easier maintainability, make sure that the
    116 copyright notices match the regexp "Copyright.* yyyy Free Software"
    117 where yyyy is the year of the latest modification in the branch
    118 (and nothing else should match it).
    119 
    120 The latest rules for GNU software can be found here:
    121 
    122   https://www.gnu.org/prep/maintain/maintain.html#Copyright-Notices
    123 
    124 ===========================================================================
    125 
    126 To make a release (for the MPFR team):
    127 
    128   *** Please read this section entirely before making any release. ***
    129 
    130   0) For a non-patchlevel release, before creating a branch from master
    131      (or more often), some operations should be done in master:
    132        * update the doc/texinfo.tex file from a recent version, and check
    133          whether this yields unwanted changes in the MPFR manual generated
    134          in the main formats (HTML, info, PDF);
    135        * make sure that the src/mpfr-longlong.h file (from GMP's longlong.h)
    136          is up-to-date (updates could also be done in patchlevel releases,
    137          but with care);
    138        * among the checks below, those that are most likely to notice issues,
    139          as it is easy to forget something;
    140        * in particular, check that the abi-compliance-checker output,
    141          the "API Compatibility" section of the manual (mpfr.texi), and
    142          the NEWS file are consistent;
    143        * update the libtool version (see src/Makefile.am) and the DLL version
    144          (see configure.ac) if need be, though this should have been done as
    145          soon as the ABI changed in the master branch;
    146        * update the ChangeLog (see below) in the master branch, in order to
    147          minimize the future diffs.
    148      If everything is OK, create the branch (below designated <branch>).
    149      Switch to the branch and create an annotated tag <branch>-root on HEAD:
    150      "New <branch> branch from master."
    151      This tag should be placed on the parent of the first commit specific to
    152      the branch; it could also be added later; its id should be the same as
    153      the one output by "git merge-base master <branch>".
    154      In the master branch, update the version with the update-version
    155      script to indicate the next version (use the "dev" suffix).
    156      Note: Not everything can be done in master before creating the branch,
    157      as this step may be done much time before the release candidate, with
    158      the goal of a feature freeze.
    159 
    160   1) Check the version and change the suffix to "rc1", "rc2", etc. with
    161      tools/update-version for the release candidates; remove the suffix
    162      for the final release.
    163      If not done yet, update the libtool version (see src/Makefile.am)
    164      and the DLL version (see configure.ac).
    165      Update the README file if need be: the list of the distributed files
    166      and the URL of the README.dev file (use the right branch).
    167      Check these versions with tools/ck-version-info (this check will also
    168      be done automatically by "make dist" / "make distcheck").
    169      Update the date in doc/mpfr.texi.
    170 
    171   2) Generate the tuning parameters on different architectures and
    172      put them in src/mparam_h.in. For each architecture:
    173 
    174      a) download the latest release of GMP on gmplib.org
    175      b) build GMP with --disable-shared in, say, "/path/to/gmp-x.y.z".
    176         There is no need in tuning GMP, since most users will build MPFR
    177         with a vanilla GMP installation, i.e., with the default GMP tuning;
    178         however, you need to go into /path/to/gmp-x.y.z/tune and type
    179         "make speed" (the MPFR tuning is using the resulting speed library)
    180      c) configure MPFR with
    181           --disable-shared --with-gmp-build=/path/to/gmp-x.y.z
    182      d) go into the "tune" directory and run "make tune"
    183      e) put the resulting mparam.h file into mparam_h.in (please include
    184         the version of GMP and the compiler used)
    185 
    186      You can produce time graphs to check the thresholds are correct (and
    187      compare to the corresponding mpf functions) with mbench. For example
    188      (-x1 corresponds to add, -x2 to sub, -x3 to mul, ...):
    189 
    190      $ cd mpfr/tools/mbench
    191      $ make mpfr-gfx GMP=... MPFR=...
    192      $  ./mpfr-gfx -b16 -e320 -s16 -f2 -x3 # compares mpfr_mul and mpf_mul
    193                                            # from 16 to 320 bits with increment
    194                                            # of 16 bits
    195      $ gnuplot -persist plot.gnuplot
    196 
    197      Another example, comparing mpfr_mul and mpf_mul from 2 to 1000000 bits,
    198      with ratio 1.1 between two sizes, 10 random values, and 10 smoothness
    199      checks:
    200 
    201      $ ./mpfr-gfx -b2 -e1000000 -r1.1 -f10 -x3 -m10
    202      $ gnuplot -persist plot.gnuplot
    203 
    204      Check the coverage of each source file by the test suite is at least 90%
    205      (or clearly justify any value under this threshold), and publish (for
    206      example in NEWS) the global coverage of this release. The individual
    207      coverage of each source file might also be published on the release web
    208      page. There is a specific mparam.h file to improve coverage; it should
    209      be tested by configuring MPFR with -DMPFR_TUNE_COVERAGE.
    210 
    211      Also test with -DMPFR_COV_CHECK, which allows one to check the coverage
    212      of some combinations of variable values (as defined in the MPFR source
    213      and test suite).
    214 
    215   3) Update the NEWS file, in particular say if the release is binary
    216      and/or API compatible (or not) with previous releases.
    217      Also update the "API Compatibility" section in the manual (mpfr.texi).
    218      Cherry-pick these changes in the master branch.
    219      Check with abi-compliance-checker (ABI Compliance Checker)[a] against
    220      the previous MPFR release (built with no configure options, except
    221      --prefix) that no changes have been missed. The build-multi script
    222      in the misc.git repository[b] may be useful to prepare data for
    223      abi-compliance-checker (for the version to be released, a temporary
    224      tarball thus needs to be generated, e.g. with "make dist").
    225      Example of use for the 4.1.1 release candidate:
    226         $ make distcheck
    227         $ mkdir ~/tmp/abicc
    228         $ /path/to/build-multi ~/tmp/abicc \
    229             /path/to/mpfr-4.1.0.tar.xz mpfr-4.1.1-rc1.tar.xz
    230         $ cd ~/tmp/abicc
    231         $ abi-compliance-checker -lib mpfr -old 4.1.0.xml -new 4.1.1-rc1.xml
    232      Note that abi-compliance-checker can check only the symbols, types
    233      and constants; it cannot detect just a change in the behavior, thus
    234      may miss some incompatibilities.
    235      Update the FAQ.html file with update-faq (and check it) in the doc
    236      directory.
    237      [a] https://lvc.github.io/abi-compliance-checker/
    238      [b] https://gitlab.inria.fr/mpfr/misc/-/blob/master/build-multi
    239 
    240   4) Update the ChangeLog file with "make update-changelog" in UTF-8 locales.
    241      This should at least be done last, in order to be complete before the
    242      generation of the tarball.
    243      Note: First, make sure that all the pending commits have been done.
    244      Push the changes with "git push".
    245 
    246   5) Create an annotated tag whose name corresponds to the content of
    247      the VERSION file:
    248        $ tag=$(cat VERSION)
    249        $ git tag -m "GNU MPFR $tag tag." $tag
    250      and push it:
    251        $ git push origin $tag
    252      Note: in case of error, see the git-tag(1) man page.
    253 
    254   6) Export the tree identified by this tag in order to get a tarball:
    255        $ ./tools/export-release $(cat VERSION) /path/to/some/dir
    256      A mpfr-$tag subdirectory will be created there; each file or directory
    257      has a timestamp corresponding to its last change.
    258      From this directory, generate the tarballs with:
    259        $ ./autogen.sh
    260        $ ./configure
    261        $ make distcheck
    262      If need be, after "./autogen.sh", replace config.guess and config.sub
    263      by their latest version (see URLs in these files), e.g. if they are
    264      known to solve issues. But note that they may not have been fully
    265      tested.
    266 
    267   7) Test the release version on different machines, with --enable-assert
    268      set to "yes", "no" (default), "none" and "full" respectively, with
    269      and without -DMPFR_DISABLE_IEEE_FLOATS in $CFLAGS, with and without gmp
    270      internal files (--enable-gmp-internals), with and without GMP built as
    271      a shared library, with objdir equal to and different from srcdir (e.g.
    272      ../mpfr-source/configure after making mpfr-source read-only), with
    273      and without --enable-logging.
    274 
    275      Try different temporary allocation methods: GMP's --disable-alloca
    276      configure option (or compile GMP with --enable-alloca=debug and MPFR
    277      with --with-gmp-build to be able to get the memory leak errors); and
    278      -DMPFR_ALLOCA_MAX=0.
    279 
    280      Try different gcc versions with different options: with and without
    281      "-std=c99 -O3 -D_XOPEN_SOURCE=500", with and without "-ansi" (which
    282      allows to turn off features that are incompatible with ISO C90),
    283      with and without [-ansi] -pedantic-errors (which has the effect to
    284      disable extensions, such as long long when used together with -ansi),
    285      with and without -std=c11, with and without --enable-thread-safe, in
    286      various FPU precisions (double, double extended and single) if the
    287      platform supports that (e.g. under Linux/x86, with GCC and its -mpc64
    288      option to simulate the FreeBSD / NetBSD 6- behavior, where by default,
    289      the x87 FPU is configured to round on 53 bits), and in various locales
    290      (LC_ALL=tr_TR in particular, if installed).
    291      On x86, test with -m96bit-long-double and -m128bit-long-double.
    292      Try also with gcc's -fno-common option.
    293      Check also with "-Wformat=2", but without logging support (in order
    294      to avoid too many spurious warnings).
    295      Check with "-UHAVE_BIG_ENDIAN -UHAVE_LITTLE_ENDIAN" to simulate
    296      platforms where the endianness is unknown (or can't be specified
    297      without AC_CONFIG_HEADERS).
    298      Check also without the mpz_t pool (-DMPFR_POOL_NENTRIES=0).
    299      Check the generic code, e.g. with -DMPFR_GENERIC_ABI in $CFLAGS
    300      (useful because most tests are written for low precision) and with
    301      mpfr_cv_c_long_double_format=unknown (as a variable assignment).
    302      Check with -DMPFR_GROUP_STATIC_SIZE=0 to detect memory leaks that would
    303      occur in medium precision or more if a MPFR_GROUP_CLEAR were forgotten.
    304 
    305      Check that make and make check pass with a C++ compiler, for example:
    306      ./configure CC=g++ (MPFR 2.3.2 did not).
    307      Also test --enable-gmp-internals with it.
    308 
    309      Try different compilers, e.g., icc, opencc (x86_64 machines),
    310      tcc <https://bellard.org/tcc/>, llvm-gcc, clang.
    311 
    312      On 64-bit PowerPC, test against GMP built with the different ABI's:
    313      32, mode32 and mode64 (in particular mode32, where long's have
    314      32 bits and limbs have 64 bits [long long]).
    315 
    316      Test with -DMPFR_TESTS_FPE_DIV -DMPFR_ERRDIVZERO
    317      -DMPFR_DISABLE_IEEE_FLOATS in order
    318      to detect whether tests can fail due to a FP division by 0 (yielding
    319      either FE_DIVBYZERO, e.g. from 1.0 / 0.0 to generate an infinity, or
    320      FE_INVALID, e.g. from 0.0 / 0.0 to generate a NaN) on platforms where
    321      such an operation fails (e.g. trap). On platforms that do not support
    322      IEEE 754, such an operation yields an undefined behavior.
    323      If _MPFR_IEEE_FLOATS is defined to 1 (by the configure script), some
    324      divisions by 0 are avoided in the MPFR library.
    325      The -DMPFR_DISABLE_IEEE_FLOATS option sets _MPFR_IEEE_FLOATS to 0,
    326      allowing one to detect more issues, for platforms without IEEE floats.
    327 
    328      Test with -D_MPFR_PREC_FORMAT=2 when the "int" type is smaller
    329      than the "long" type.
    330 
    331      Test with mini-gmp.
    332 
    333      Test with valgrind by setting the environment variable:
    334        LOG_COMPILER="valgrind -q --error-exitcode=1 --leak-check=full"
    335      See below for more information about valgrind.
    336 
    337      Test with "clang -fsanitize=undefined" (available as of Clang 3.3),
    338      e.g.: ./configure CC=clang CFLAGS='-fsanitize=undefined'
    339      The -fno-sanitize-recover option can give more visibility by making
    340      the corresponding tests fail (useful for automated tests). However,
    341      clang unconditionally regards the floating-point division by zero
    342      as an error with "-fsanitize=undefined"; this is detected by a
    343      configure test, which sets MPFR_ERRDIVZERO to disable the tests
    344      involving a floating-point division by zero. Alternatively, on systems
    345      supporting IEC 60559 / IEEE 754 division by zero, one can also provide
    346      the -fno-sanitize=float-cast-overflow,float-divide-by-zero option
    347      *after* the -fsanitize=undefined one.
    348 
    349      GCC 4.9 also supports "-fsanitize=undefined", but it just gives
    350      diagnostic messages at run time, not a failure; GCC 5 supports
    351      -fno-sanitize-recover like clang.
    352 
    353      Test with GCC's AddressSanitizer (-fsanitize=address). Optimizations
    354      should not be enabled, otherwise they can make some errors disappear.
    355      One also needs to unset LD_PRELOAD or use -static-libasan to avoid
    356      failures. But the -static-libasan solution does not work with MPFR,
    357      as it yields the following error:
    358        Your application is linked against incompatible ASan runtimes.
    359 
    360      Test with i686-w64-mingw32 under Wine (see below).
    361 
    362      Test with both "make check" and the worst cases.
    363 
    364      Check various warnings, in particular for obsolescent features.
    365      With GCC: "-Wall -Wold-style-declaration -Wold-style-definition
    366      -Wmissing-parameter-type -Wmissing-prototypes -Wmissing-declarations
    367      -Wmissing-field-initializers". The -Wint-in-bool-context option
    368      could be added once available. These warnings can easily be checked
    369      in automatic tests by adding "-Werror". Add -Wno-error=... options
    370      when needed (but except in some cases, it may be better to improve
    371      the MPFR code; in particular, the -Wno-error=unused-function option
    372      should no longer be necessary, thanks to conditional compilation or
    373      MPFR_MAYBE_UNUSED).
    374 
    375      Check whether some functions could be declared as pure, const, etc.
    376      with GCC, using -Wsuggest-attribute=... options.
    377 
    378      Check that there are no abnormal regressions in the timings (both for
    379      100, 1000, 10000 digits, https://www.mpfr.org/mpfr-current/timings.html,
    380      and for small precision, using the mbench program, see tools/mbench).
    381 
    382      Test the library interface compatibility by running the test suite
    383      compiled against an old library version and dynamically linked with
    384      the new library version: for instance, build the shared library of
    385      old and new MPFR versions with the same configure options, and from
    386      the build directory of the old version, do something like:
    387      (cd src/.libs && \
    388       ln -nsf ../../../mpfr-new/src/.libs/libmpfr.so.1.* libmpfr.so.1)
    389      then "make check".
    390 
    391      Also test with different environment variables set
    392      (GMP_CHECK_RANDOMIZE, MPFR_CHECK_LIBC_PRINTF, MPFR_CHECK_LARGEMEM,
    393      MPFR_CHECK_EXPENSIVE, MPFR_SUSPICIOUS_OVERFLOW, MPFR_CHECK_LOCALES,
    394      MPFR_CHECK_BADCASES).
    395      Note: a non-default GMP_CHECK_RANDOMIZE value allows one to make sure
    396      that a test against a hard-coded result does not depend on it.
    397 
    398      Check there is no branch misprediction due to wrong MPFR_LIKELY or
    399      MPFR_UNLIKELY statements. For that test, configure with
    400      --enable-debug-prediction, run "timings-mpfr 100", and check that
    401      the output contains no WARNING.
    402 
    403      For various platforms and compilers, check that:
    404        * [make check-gmp-symbols]
    405          MPFR does not use GMP internal symbols (unless --with-gmp-build
    406          or --enable-gmp-internals has been used);
    407        * [make check-exported-symbols]
    408          MPFR does not define symbols with a GMP reserved prefix.
    409      But note that these rules are not really portable: they may do
    410      nothing or might even incorrectly fail on some platforms.
    411 
    412   8) For the release itself (not the release candidates), update the
    413      version with the update-version script in the Git repository to
    414      indicate the next patchlevel version (use the "dev" suffix).
    415      Increase the 2nd number of the libtool version (see src/Makefile.am)
    416      for the next patchlevel version.
    417 
    418   9) * For the release itself (not the release candidates):
    419      Create a web page for the MPFR release and add the documentation
    420      (for mpfr.html, use "makeinfo --html --no-split mpfr.texi" from
    421      the doc directory). Make sure that both the .dvi and .ps files
    422      have an a4 papersize (see technical information later about the
    423      MPFR manual).
    424      Upload the tarballs and the signatures to the MPFR web server
    425      (via the misc.git repository).
    426      Prepare the files for the GNU FTP site with the gnu-sigdir script
    427      of the misc.git repository and upload them.
    428      Update the mpfr-current symbolic link and the history page.
    429      Update the old current page to point to the new release; see
    430      examples for 3.0.1 (latest version of the branch) and 3.1.0
    431      (which is not the latest version of the branch).
    432      Run the tools/announce-text script to do some checking and get
    433      the announce text. Edit this text if need be.
    434      Announce the release in the mpfr-announce, mpfr, gmp-discuss, gcc
    435      and info-gnu[1] mailing-lists.
    436      In case of a new patchlevel release, add a link from the web page
    437      of the previous release.
    438 
    439      * For the release candidates:
    440      Upload the tarballs and the signatures to the MPFR web server
    441      (via the misc.git repository).
    442      Run the tools/announce-text script to do some checking and get
    443      the announce text. Edit this text if need be.
    444      Announce the RC in the mpfr-announce, mpfr, gmp-discuss, gcc and
    445      platform-testers[2] mailing-lists.
    446      A minimal web page for the MPFR release can be created right now
    447      (see Git history such as [3] for examples), as the manual already
    448      contains the new URLs.
    449 
    450      [1] https://www.gnu.org/prep/maintain/html_node/Announcements.html
    451      [2] See https://lists.gnu.org/mailman/listinfo/platform-testers and
    452      https://lists.gnu.org/archive/html/platform-testers/2011-09/msg00000.html
    453      [3] commit a04e43bb98b916c354f15d7e88b2934f84d0a6ab of misc.git
    454          i.e. https://gitlab.inria.fr/mpfr/misc/-/commit/a04e43bb
    455 
    456 Note: Mail sent to the mpfr-announce list should also be sent to
    457 the mpfr list, and the Reply-To should be set to the mpfr list.
    458 
    459 For major or minor releases (but not patchlevels), a new branch may be
    460 created first to allow new features to be committed to master.
    461 
    462 To add tcc support with libtool 2.4.2 or below, do the following before
    463 running "make distcheck":
    464 $ patch m4/libtool.m4 libtool-tcc-wl.patch
    465 $ autoreconf
    466 
    467 And for libtool 2.4.3 to 2.4.6, the following is needed:
    468 $ patch m4/libtool.m4 libtool-tcc-rpath.patch
    469 $ autoreconf
    470 
    471 ===========================================================================
    472 
    473 Here is a non-exhaustive list of macros used for building and checking MPFR.
    474 Most of them are automatically set up by the configure script and its options.
    475 
    476 List of macros used for building MPFR (also used for checking):
    477 
    478 + HAVE_CONFIG_H:        Define if we have to include 'config.h' first.
    479 + MPFR_HAVE_GMP_IMPL:   Define if we have the gmp internal files.
    480                         ('gmp-impl.h', 'gmp-maparam.h', ...).
    481 + MPFR_USE_MINI_GMP:    Define to use mini-gmp.
    482 
    483 + HAVE_ALLOCA:          Define if alloca() works.
    484 + HAVE_ALLOCA_H:        Define if the function alloca() is in alloca.h.
    485 + HAVE_LOCALE_H:        Define if <locale.h> is available.
    486 + HAVE_LONG_LONG:       Define if the system supports 'long long'.
    487 
    488 + HAVE_STDARG:          Define if the system supports 'stdarg.h'.
    489                         Otherwise it is assumed it is 'vararg.h'.
    490 
    491 + HAVE_INTTYPES_H:      Define if <inttypes.h> is available (ISO C99).
    492 + HAVE_STDINT_H:        Define if <stdint.h> is available (ISO C99).
    493 + MPFR_HAVE_INTMAX_MAX: Define if the INTMAX_MAX macro works correctly
    494                         (if 'intmax_t' is supported).
    495 
    496 + MPFR_HAVE_C11_LOCK:   Define if C11 threads are supported.
    497 + HAVE_PTHREAD:         Define if pthread is available.
    498 
    499 Format of long double.
    500 + HAVE_LDOUBLE_IS_DOUBLE:               IEEE double.
    501 + HAVE_LDOUBLE_IEEE_EXT_BIG:            IEEE extended, big endian.
    502 + HAVE_LDOUBLE_IEEE_EXT_LITTLE:         IEEE extended, little endian.
    503 + HAVE_LDOUBLE_IEEE_QUAD_BIG:           IEEE quad, big endian.
    504 + HAVE_LDOUBLE_IEEE_QUAD_LITTLE:        IEEE quad, little endian.
    505 + HAVE_LDOUBLE_MAYBE_DOUBLE_DOUBLE:     Double-double (a.k.a. IBM).
    506 
    507 + MPFR_DISABLE_IEEE_FLOATS:
    508                         Related to the native floating-point types (e.g.
    509                         for conversion functions), use the generic code
    510                         instead of IEEE 754 specific one.
    511                         Note: This is mainly for developers in order to
    512                         check the generic code, as machines without IEEE
    513                         floating-point types are very uncommon nowadays.
    514 + MPFR_WANT_ASSERT:     Assertion level. See src/mpfr-impl.h for details.
    515 + MPFR_EXP_CHECK:       Define if we want to check the exp field.
    516 
    517 + _MPFR_PREC_FORMAT:    Used to define the mpfr_prec_t type.
    518 + _MPFR_EXP_FORMAT:     Used to define the mpfr_exp_t type.
    519                         Note: these two macros are for internal use,
    520                         testing and experimented users only; they must
    521                         not be changed when the MPFR library is to be
    522                         installed in a system directory.
    523 
    524 + IEEE_DBL_MANT_DIG:    Number of bits in the significand (mantissa) of a
    525                         double (default: 53).
    526 + MPFR_LDBL_MANT_DIG:   Number of bits in the significand (mantissa) of a
    527                         long double (generally based on the standard macro
    528                         LDBL_MANT_DIG). Note: be careful with formats such
    529                         as double-double (a.k.a. IBM long double).
    530 
    531 + MPFR_USE_LOGGING:     Define to enable logging (this needs GCC, and this
    532                         is not available with mini-gmp, since mpfr_fprintf
    533                         cannot be defined with mini-gmp).
    534 
    535 + MPFR_WANT_DECIMAL_FLOATS:
    536                         Define to build conversion functions from/to
    537                         decimal floats. At most one of the following
    538                         three macros can be defined.
    539 + DECIMAL_BID_FORMAT:   BID encoding detected or assumed.
    540 + DECIMAL_DPD_FORMAT:   DPD encoding detected or assumed.
    541 + DECIMAL_GENERIC_CODE: Use generic code for decimal floats.
    542 
    543 + MPFR_WANT_FLOAT128:   Define to build conversion functions from/to
    544                         binary128 floats (_Float128 or __float128).
    545 
    546 + MPFR_ALLOCA_MAX:      Maximum size for the use of alloca() by temporary
    547                         allocations (default: 16384); if set to 0, alloca()
    548                         will not be used, and not even referenced.
    549                         This macro is not used when MPFR is built with
    550                         the GMP build directory (--with-gmp-build).
    551 
    552 + MPFR_USE_THREAD_SAFE: Define to build MPFR as thread safe (TLS).
    553 + MPFR_USE_C11_THREAD_SAFE:
    554                         Define to implement TLS in the C11 way.
    555 
    556 + MPFR_WANT_SHARED_CACHE:
    557                         Define to have caches shared by all threads.
    558 + MPFR_THREAD_LOCK_METHOD:
    559                         When MPFR_WANT_SHARED_CACHE is defined, this macro
    560                         gives the thread locking method (string).
    561 
    562 + MPFR_HAVE_NORETURN:   Define if the _Noreturn function specifier is
    563                         supported.
    564 + MPFR_HAVE_BUILTIN_UNREACHABLE:
    565                         Define if the __builtin_unreachable GCC built-in is
    566                         supported.
    567 
    568 + MPFR_GENERIC_ABI:     Define to disable code that is tied to a specific
    569                         ABI (e.g. GMP_NUMB_BITS value).
    570                         Note: Currently it is also used to disable code
    571                         specific to low precision, i.e. to use only generic
    572                         code. This is useful because most tests are written
    573                         for low precision, meaning that without this macro,
    574                         the generic code would not sufficiently be tested.
    575 
    576 + MPFR_WANT_PROVEN_CODE:
    577                         Define to enable formally proven code (used only
    578                         under some conditions, see below).
    579 
    580 List of macros used for checking MPFR:
    581 
    582 + MPFR_HAVE_FESETROUND: Define if the function fesetround() is available
    583                         (and in header <fenv.h>).
    584 + MPFR_FPU_PREC:        Allows to test MPFR on x86 processors when the
    585                         x87 FPU rounding precision has been changed (see
    586                         tests/tests.c for its usage).
    587 + HAVE_SUBNORM_DBL:     Define if the double type fully supports subnormals.
    588 + HAVE_SUBNORM_FLT:     Define if the float type fully supports subnormals.
    589 + HAVE_SIGNEDZ:         Define if signed zeros are supported.
    590 + HAVE_SYS_TIME_H:      Define if the header sys/time.h is usable.
    591 + HAVE_GETTIMEOFDAY:    Define if the function gettimeofday() is available.
    592 + HAVE_SETLOCALE:       Define if the function setlocale() is available.
    593 + MPFR_ERRDIVZERO:      Define if the floating-point division by 0 fails
    594                         in the MPFR library (e.g., because a SIGFPE signal
    595                         is generated, or because it is regarded as undefined
    596                         behavior by a sanitizer). This disables the tests
    597                         involving such operations.
    598                         Note: Tests related to NaN and infinities must not
    599                         rely on native FP division by 0, whether this macro
    600                         is defined or not.
    601 + MPFR_TESTS_FPE_DIV:   Define to check whether there has been a FP
    602                         exception FE_DIVBYZERO or FE_INVALID, which
    603                         probably comes from 1.0 / 0.0 or 0.0 / 0.0 to
    604                         generate an infinity or a NaN. This is normally
    605                         used together with MPFR_ERRDIVZERO, in order to
    606                         check that all divisions by 0 have been protected
    607                         in the tests (so that tests can pass on platforms
    608                         where the floating-point division by 0 fails).
    609 + MPFR_TESTS_FPE_TRAP:  Define to trap the FE_DIVBYZERO and FE_INVALID
    610                         exceptions; MPFR_TESTS_FPE_DIV needs to be defined
    611                         too, and MPFR_ERRDIVZERO should be defined as well
    612                         to avoid spurious traps (see above).
    613 + MPFR_TESTS_TIMEOUT:   Define to enable timeout in the tests. Its value
    614                         specifies the default timeout (in seconds), or 0
    615                         for no timeout by default. When defined, this
    616                         value can be overridden at run time (e.g., with
    617                         "make check" or when executing an individual test)
    618                         with the MPFR_TESTS_TIMEOUT environment variable.
    619 + MPFR_TESTS_ABORT:     Define to replace exit(1) by abort(), thus with a
    620                         core dump.
    621 + MPFR_COV_CHECK:       Define to enable value coverage checking (must not
    622                         be used in production). This macro is for the MPFR
    623                         developers, in order to improve the test suite.
    624 
    625 ===========================================================================
    626 
    627 Environment variables that affect the tests:
    628 
    629 + GMP_CHECK_RANDOMIZE:  Seed for the random functions, except for 0 or 1,
    630                         in which case a random (time based) seed is used.
    631                         By default, a fixed seed is used. Only developers
    632                         and testers should change the seed.
    633 
    634 + MPFR_CHECK_LARGEMEM:  Define to enable tests that take a lot of memory.
    635 
    636 + MPFR_CHECK_EXPENSIVE: Define to enable tests that take a lot of time.
    637                         Warning! The --enable-assert=full option should
    638                         not be used, otherwise this can take much too
    639                         long. While checking assertions (--enable-assert)
    640                         may be useful with MPFR_CHECK_EXPENSIVE, the
    641                         --enable-assert=full is not necessary with it.
    642 
    643 + MPFR_CHECK_LIBC_PRINTF:
    644                         Define to enable comparisons with the printf
    645                         function of the C library. These comparisons are
    646                         disabled by default as failures could be due to
    647                         the C library itself on some machines, and they
    648                         do not affect MPFR.
    649 
    650 + MPFR_CHECK_LOCALES:   Fail in case a locale cannot be set. Developers
    651                         can set this variable on their machines to make
    652                         sure that needed locales are properly installed
    653                         and tested.
    654 
    655 + MPFR_CHECK_BADCASES:  Fail if function bad_cases generates too many
    656                         cases for which f(f^{-1}(x))  x, due to a poor
    657                         choice of the parameters.
    658 
    659 + MPFR_DEBUG_BADCASES:  For debugging (see tests.c, function bad_cases).
    660 
    661 + MPFR_SUSPICIOUS_OVERFLOW:
    662                         Define to check suspicious overflow in the generic
    663                         tests (tgeneric.c). For developers and testers.
    664 
    665 + MPFR_TESTS_MEMORY_LIMIT:
    666                         The memory limit for the tests (default is
    667                         2^22 = 4 MB). Set to 0 for unlimited.
    668 
    669 + MPFR_TESTS_TIMEOUT:   When timeout in the tests is enabled, this
    670                         overrides the value of the macro.
    671 
    672 + MPFR_TGENERIC_STAT:   For the generic tests, output the number of normal
    673                         cases and the total.
    674 
    675 ===========================================================================
    676 
    677 Before testing any macro (such as HAVE_STDINT_H) in a .c file, one needs:
    678 
    679 #ifdef HAVE_CONFIG_H
    680 # include "config.h"
    681 #endif
    682 
    683 except if mpfr-impl.h (for the library) or mpfr-test.h (for the tests) is
    684 included first, because these header files already have the above code.
    685 
    686 ===========================================================================
    687 
    688 The GNU Coding standards can be read at:
    689   https://www.gnu.org/prep/standards/
    690 
    691 ISO C Names and corresponding headers:
    692   http://www.schweikhardt.net/identifiers.html
    693 
    694 The C language:
    695   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (C99)
    696   https://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
    697   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (C11 draft)
    698   https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3054.pdf (C2x draft)
    699   http://home.datacomm.ch/t_wolf/tw/c/c9x_changes.html
    700 
    701 About undefined behavior:
    702   https://blog.regehr.org/archives/213
    703   https://blog.regehr.org/archives/226
    704   https://blog.regehr.org/archives/232
    705   https://blog.regehr.org/archives/1520
    706   https://blog.llvm.org/posts/2011-05-13-what-every-c-programmer-should-know/
    707 
    708 Type punning, strict aliasing, and optimization:
    709   https://blog.regehr.org/archives/959
    710 
    711 To allow MPFR to be built on some buggy compiler, try to follow
    712 these rules:
    713 
    714    =====================================================================
    715 
    716 Don't write:
    717   mp_limb_t l;
    718   [...]
    719   if (l) do_action ();
    720 But:
    721   mp_limb_t l;
    722   [...]
    723   if (l != 0) do_action ();
    724 
    725 since mp_limb_t may be "unsigned long long", and some buggy compiler
    726 produce illegal codes with the first form.
    727 
    728    =====================================================================
    729 
    730 Try to avoid "LONG_MIN/1" since it produces a SIGNAL on (old) FreeBsd.
    731 Don't forget that LONG_MIN/-1 is not representable (specially
    732 with code like MPFR_EXP_MIN/n).
    733 
    734    =====================================================================
    735 
    736 Don't use "near" and "far" as variable names since they are "Keywords"
    737 for some C compiler (Old DOS compiler). Also don't use "pm", which is used
    738 by the C compiler 'sharp' to design variables that should be stored in the
    739 flash memory. Don't use "new", which is reserved in C++.
    740 
    741 Check C++ reserved keywords, e.g. from
    742 
    743   https://en.cppreference.com/w/cpp/keyword
    744 
    745 or more generally:
    746 
    747   https://www.google.com/search?q=%22C%2B%2B%22+reserved+keywords
    748 
    749 Quoted from <https://www.gnu.org/software/gcc/codingconventions.html>:
    750 
    751   Avoid the use of identifiers or idioms that would prevent code
    752   compiling with a C++ compiler. Identifiers such as new or class,
    753   that are reserved words in C++, should not be used as variables
    754   or field names. Explicit casts should be used to convert between
    755   void* and other pointer types.
    756 
    757 When a string literal ("...") is followed by a macro name, there
    758 must be white space between them, otherwise this is parsed as a
    759 user-defined string literal in C++11:
    760 
    761   https://en.cppreference.com/w/cpp/language/user_literal
    762   https://stackoverflow.com/a/6402166/3782797
    763 
    764 In at least mpfr.h, use the underscore version of the attribute names
    765 (e.g. "__sentinel__" instead of "sentinel"), otherwise user code could
    766 fail to compile with GCC when it defines macros such as "sentinel"
    767 (before the #include's or via the -D command-line option). See
    768 
    769   https://gcc.gnu.org/onlinedocs/gcc/Attribute-Syntax.html
    770 
    771    =====================================================================
    772 
    773 Setting errno is safe to signal some error information (as in the
    774 formatted output functions), but errno must not be read (unless we
    775 have just modified it) as this may yield undefined behavior in some
    776 corner cases out of our control (ISO C99 / C11, 7.14.1.1p5, also
    777 mentioned in J.2).
    778 
    779    =====================================================================
    780 
    781 C-Reduce may be useful to try to identify whether a bug comes from the
    782 compiler.
    783 
    784    =====================================================================
    785 
    786 About type conversions:
    787 
    788 To do type punning (i.e. store a value of some type and reinterpret
    789 it as another type), use a union. This is valid in ISO C99 and above
    790 (in C99, see 6.5#7 and Note 82 of 6.5.2.3#3 for the clarification),
    791 but not in C++. So, users of a C++ compilers should make sure that
    792 their compiler supports type punning via a union. If some problem is
    793 reported, we should address it either by making the code compatible
    794 or by adding a configure test to reject the compiler.
    795 
    796 Some references:
    797 * https://en.wikipedia.org/wiki/Type_punning#Use_of_union
    798 * https://stackoverflow.com/questions/346622/opinions-on-type-punning-in-c
    799   "Opinions on type-punning in C++?"
    800 
    801 Do not do conversions between function pointers and other kinds of
    802 pointers (including to void *). This yields undefined behavior and
    803 may not work in practice. Example:
    804 
    805   https://stackoverflow.com/questions/5579835/c-function-pointer-casting-to-void-pointer
    806 
    807 Adding a level of indirection is OK, as suggested there, and on:
    808 
    809   https://stackoverflow.com/questions/36645660/why-cant-i-cast-a-function-pointer-to-void
    810 
    811 To convert an unsigned integer u to the corresponding signed integer with
    812 the two's complement rule (i.e. modular arithmetic) but in a portable way,
    813 write e.g. for long:
    814 
    815   u > LONG_MAX ? -1 - (long) ~u : (long) u
    816 
    817 (at least GCC and Clang optimize this expression to identity). This is
    818 provided by the ULONG2LONG() macro (defined in mpfr-impl.h).
    819 
    820    =====================================================================
    821 
    822 For floating-point constants, do not use the non-standard and useless
    823 suffix "D". It seems to mean "double" for GCC[*], but for instance,
    824 ICC 15 regards 1.0D as 0 (though ICC claims compatibility with GCC)
    825 and for tcc 0.9.27, this is an error. The standard suffixes from TS 18661-2
    826 are:
    827 
    828 	f l F L df dd dl DF DD DL
    829 
    830 Moreover, avoid native floating-point if possible. Be careful that GCC
    831 does not conform to the C standard by default. References:
    832   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=323
    833   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85957
    834 
    835 [*] https://stackoverflow.com/questions/4331200/what-do-f-and-d-mean-at-the-end-of-numeric-literals
    836 
    837    =====================================================================
    838 
    839 In MPFR, _Float128 may be defined as __float128 if the latter is provided
    840 by the compiler, but not the former. In such a case, do not assume that
    841 _Float128 and long double are necessarily different types (as required by
    842 the WG14 N2579 draft "IEC 60559 interchange and extended types").
    843 
    844    =====================================================================
    845 
    846 For string suffix selection, do not write expressions of the form
    847 string + integer, such as
    848 
    849   "foo" + i
    850 
    851 because Clang emits a warning
    852 
    853   adding 'int' to a string does not append to the string [-Wstring-plus-int]
    854 
    855 Instead, one may write
    856 
    857   &"foo"[i]    or    (char *) "foo" + i
    858 
    859 (the first form is the one suggested by Clang, the second one is more
    860 immediate to understand).
    861 
    862 ===========================================================================
    863 
    864 Avoid variable names "l", "I" and "O", which look like "1" and "0" with
    865 some fonts.
    866 
    867 ===========================================================================
    868 
    869 For identifiers defined in MPFR, do not use the GMP namespaces
    870 (gmp_..., GMP_...).
    871 
    872 ===========================================================================
    873 
    874 You are allowed to use the mpn and mpz classes of GMP functions (types
    875 and functions starting with "mpn_" and "mpz_"). However, except for some
    876 conversion functions where they may be needed,
    877   * the mpq class and GMP's formatted output and input functions (i.e.,
    878     printf and scanf style) can only be used in an alternative method
    879     by testing MPFR_USE_MINI_GMP (and only if there is a real benefit),
    880     since they are not available in mini-gmp;
    881   * the mpf class must not be used at all.
    882 
    883 ===========================================================================
    884 
    885 The headers <limits.h>, <stdio.h>, <stdlib.h> and <string.h> are always
    886 included in mpfr-impl.h; thus you need not (and should not) include them
    887 in usual source and test files.
    888 
    889 ===========================================================================
    890 
    891 For files that need intmax_t or similar, use:
    892 
    893 #if HAVE_INTTYPES_H
    894 # include <inttypes.h>
    895 #endif
    896 #if HAVE_STDINT_H
    897 # include <stdint.h>
    898 #endif
    899 
    900 Note that even though the ISO C99 standard requires that <inttypes.h>
    901 include <stdint.h>, in practice this is not true on all platforms,
    902 such as OSF/1 (Tru64) 5.1. This is consistent with autoconf, which
    903 has used this form since 2004-01-26 (in headers.m4).
    904 
    905 References:
    906   https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=62ac9bbfebe879581dabeed78c6ac66b907dd51d
    907   https://sympa.inria.fr/sympa/arc/mpfr/2010-08/msg00015.html
    908 
    909 ===========================================================================
    910 
    911 Use locale-dependent functions when the result needs to depend on the
    912 locales, e.g. the decimal-point character in mpfr_out_str.
    913 
    914 Conversely, do not use locale-dependent functions when the result must
    915 not depend on the locales. In particular, the alphanumeric characters
    916 used in number strings (as created by mpfr_get_str) must be those of
    917 the required characters from the basic character set (see ISO C99
    918 standard Section 5.2.1 "Character sets").
    919 
    920 Note that in Turkish locales on some systems:
    921   * the uppercase version of "i" is "" (an "I" with a dot above);
    922   * the lowercase version of "I" is "" (a dotless "i").
    923 These characters are available in ISO-8859-9, thus as "char" in the
    924 tr_TR.iso88599 locale. However, in UTF-8, they are not available as
    925 (8-bit) "char"; thus toupper('i') gives 'i' and tolower('I') gives 'I'.
    926 So, when writing code and testing, these two encodings need to be
    927 considered, as they can give different behaviors.
    928 
    929 ===========================================================================
    930 
    931 If you have to mix TMP_DECL and MPFR_SAVE_EXPO_DECL in the declaring
    932 section of your function, please declare MPFR_SAVE_EXPO_DECL before
    933 TMP_DECL, since TMP_DECL may be replace by nothing:
    934 
    935 Instead of:                                 Usually preprocessed as:
    936   unsigned long t                             unsigned long t;
    937   TMP_DECL (marker);                          ;
    938   MPFR_SAVE_EXPO_DECL (expo);                 mpfr_save_expo_t expo;
    939 use:
    940   unsigned long t                             unsigned long t;
    941   MPFR_SAVE_EXPO_DECL (expo);                 mpfr_save_expo_t expo;
    942   TMP_DECL (marker);                          ;
    943 
    944 ===========================================================================
    945 
    946 Memory allocation
    947 -----------------
    948 
    949 Do not use TMP_DECL / TMP_ALLOC, ... but MPFR_TMP_DECL, MPFR_TMP_ALLOC, ...
    950 
    951 In the tests, use only tests_allocate, tests_reallocate and tests_free
    952 (there may be some rare exceptions, such as in tabort_defalloc*.c).
    953 
    954 Avoid code that would yield unnecessary reallocations, which can be very
    955 expensive. In particular, for code that is based on the mpz layer of GMP,
    956 do not use mpz_init, but mpz_init2 with the estimated maximum size; it is
    957 better to overestimate this size a bit than underestimating it.
    958 
    959 ===========================================================================
    960 
    961 Do not use C99-only features, such as empty macro arguments or C++-style
    962 comments.
    963 
    964 ===========================================================================
    965 
    966 When testing a "boolean" macro M (i.e. which is normally either equal
    967 to 1 or undefined), do not use #if M, but #ifdef M or #if defined(M).
    968 With icc, the form #if M triggers a warning ("remark #193: zero used
    969 for undefined preprocessing identifier").
    970 
    971 ===========================================================================
    972 
    973 If you want to use the logging of MPFR, you need to enable it:
    974   make distclean
    975   ./configure --enable-logging
    976   make
    977 Then link your program with this new build of MPFR.
    978 
    979 The logging feature needs GCC to build MPFR, and it is not available
    980 with mini-gmp, since mpfr_fprintf cannot be defined with mini-gmp.
    981 
    982 Warning! The logging code for functions sometimes output an "inexact"
    983 value, but in case of exception, this value may be meaningless. In
    984 fact, the output value is the value of some variable; please check
    985 the source code of the function to understand its real meaning.
    986 
    987 You can control what is logged using the environment variables:
    988 
    989 MPFR_LOG_FILE:  Name of the LOG file (default: mpfr.log).
    990 MPFR_LOG_FLUSH: When this variable is set, flush the log stream after
    991                 each log output (useful to get the latest logs in case
    992                 of crash, but this makes logging slower).
    993 MPFR_LOG_PREC:  Number of digits of the output (set the internal variable
    994                 mpfr_log_prec, default: 6).
    995 MPFR_LOG_LEVEL: Max recursive level (default: 7).
    996 
    997 MPFR_LOG_INPUT:    Log the input
    998 MPFR_LOG_OUTPUT:   Log the output
    999 MPFR_LOG_TIME:     Log the time spent inside the function.
   1000 MPFR_LOG_INTERNAL: Log the intermediary variables if any.
   1001 MPFR_LOG_MSG:      Log the messages sent by MPFR if any.
   1002 MPFR_LOG_ZIV:      Log what the Ziv Loops do.
   1003 MPFR_LOG_STAT:     Log how many times Ziv failed.
   1004 MPFR_LOG_ALL:      Log everything
   1005 
   1006 Define them. Run your program, and view `mpfr.log`.
   1007 
   1008 For example, just define MPFR_LOG_ALL, run you program, and view `mpfr.log`.
   1009 
   1010 Note: The running time may be much longer. If logging is used on the
   1011 test suite with a default timeout, it may be necessary to increase the
   1012 timeout time by setting the environment variable MPFR_TESTS_TIMEOUT
   1013 to the new timeout value in seconds (or 0 to disable the timeout).
   1014 
   1015 ===========================================================================
   1016 
   1017 This feature is available only for gcc >= 3.0 and glibc >= 2.0.
   1018 To achieve this, these macros have been added:
   1019 
   1020 +++ MPFR_LOG_VAR(y)
   1021  Log a MPFR variable if requested (INTERNAL).
   1022  Example:
   1023    mpfr_t y;
   1024    MPFR_LOG_VAR (y);
   1025 
   1026 +++ MPFR_LOG_MSG(x)
   1027  Log another message (a warning for example)
   1028 Example:
   1029  MPFR_LOG_MSG (("WARNING: Unchecked code\n", 0));
   1030 The 0 is here a dummy value, because there must be at least an argument
   1031 after the format string.
   1032 
   1033 +++ MPFR_LOG_BEGIN(x)
   1034  Add this macro at the beginning of a function.
   1035 Example:
   1036  int dodo (mpfr_t x, mpfr_t op, int cnt, mpfr_rnd_t rnd) {
   1037   [decl]
   1038   MPFR_LOG_BEGIN (("op[%Pu]=%.*Rg rnd=%s",
   1039                     mpfr_get_prec(op), mpfr_log_prec, op, RND2STR(rnd)));
   1040 
   1041 +++ MPFR_LOG_END(x)
   1042  Add this macro at the end of a function.
   1043 Example:
   1044  MPFR_LOG_END (("x[%Pu]=%.*Rg i=%d", mpfr_get_prec (x), mpfr_log_prec, x, i));
   1045  return i;
   1046 }
   1047 
   1048 +++ MPFR_LOG_FUNC (begin,end)
   1049   Add this macro at the beginning of a function. It does
   1050 the same job as MPFR_LOG_BEGIN and MPFR_LOG_END but it is smatter
   1051 since it intercepts the return itself to put the end statement.
   1052 Example
   1053  MPFR_LOG_FUNC (
   1054     ("op[%Pu]=%.*Rg rnd=%d", op, mpfr_get_prec (op), mpfr_log_prec, op),
   1055     ("x[%Pu]=%.*Rg inexact=%d", mpfr_get_prec (x), mpfr_log_prec, x, i));
   1056 
   1057 
   1058 The double brackets "((" and "))" are needed since MPFR must still
   1059 compile with non GNU compiler, so Macros with variable # of args
   1060 are not allowed.
   1061 
   1062 It uses the extension of the mpfr_printf function: %Rf to display a mpfr_t.
   1063 %Ru is used to display the precision of a mpfr_t.
   1064 It uses some extended attributes of GCC (constructor, etc.) to achieve
   1065 its goals too.
   1066 
   1067 ===========================================================================
   1068 
   1069 ZivLoop Controller
   1070 
   1071 Ziv strategy is quite used in MPFR. In order to factorize the code, you
   1072 could use these macros:
   1073 
   1074 +++ MPFR_ZIV_DECL(_x)
   1075  Declare a ZivLoop controller
   1076 
   1077 +++ MPFR_ZIV_INIT(_x, _prec)
   1078  Init a ZivLoop controller according to the initial value of _prec.
   1079 
   1080 +++ MPFR_ZIV_NEXT(_x, _prec)
   1081  Increase the precision _prec according to the ZivLoop controller.
   1082 
   1083 +++ MPFR_ZIV_FREE(_x)
   1084  Free the ZivLoop controller.
   1085 
   1086 ===========================================================================
   1087 
   1088 If you plan to add a new function, you could follow this schema:
   1089 
   1090 int
   1091 mpfr_toto (mpfr_ptr rop, mpfr_srcptr op, mpfr_rnd_t rnd)
   1092 {
   1093   [Declare all used variables]
   1094   int inexact;
   1095   mpfr_prec_t prec;
   1096   MPFR_ZIV_DECL (loop);
   1097   MPFR_SAVE_EXPO_DECL (expo);
   1098 
   1099   /* Log it if requested */
   1100   MPFR_LOG_BEGIN
   1101     (("op[%Pu]=%.*Rg rnd=%d", mpfr_get_prec (op), mpfr_log_prec, op, rnd),
   1102      ("rop[%Pu]=%.*Rg inexact=%d",
   1103        mpfr_get_prec (rop), mpfr_log_prec, rop, inexact));
   1104 
   1105   /* First deal with particular cases */
   1106   if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (op)))
   1107     {
   1108       if (MPFR_IS_NAN (op))
   1109         {
   1110          MPFR_SET_NAN (rop);
   1111          MPFR_RET_NAN;
   1112         }
   1113       else if (MPFR_IS_INF (op))
   1114         {
   1115          [Code to deal with Infinity]
   1116         }
   1117       else
   1118         {
   1119           MPFR_ASSERTD (MPFR_IS_ZERO (op));
   1120           [Code to deal with Zero]
   1121         }
   1122     }
   1123   [Other particular case: For example, op<0 or op == 1]
   1124 
   1125   [Compute the first estimation of the used precision `prec`]
   1126   [Initialize the intermediate variables using mpfr_init2]
   1127   MPFR_SAVE_EXPO_MARK (expo);            /* Maximal range for exponent */
   1128 
   1129   MPFR_ZIV_INIT (loop, prec);            /* Initialize the ZivLoop controller */
   1130   for (;;)                               /* Infinite loop */
   1131     {
   1132       [Compute an estimation of the function and]
   1133       [an estimate of the error.]
   1134       if (MPFR_CAN_ROUND (...))          /* If we can round, quit the loop */
   1135         break;
   1136       MPFR_ZIV_NEXT (loop, prec);        /* Increase used precision */
   1137       [Use `mpfr_set_prec` to resize all needed intermediate variables]
   1138     }
   1139   MPFR_ZIV_FREE (loop);                  /* Free the ZivLoop Controller */
   1140 
   1141   inexact = mpfr_set (rop, temp, rnd);   /* Set rop to the computed value */
   1142   [Clear all intermediate variables]
   1143 
   1144   MPFR_SAVE_EXPO_FREE (expo);            /* Restore exponent range */
   1145   return mpfr_check_range (rop, inexact, rnd);  /* Check range and quit */
   1146 }
   1147 
   1148 Make sure that Ziv loops cannot increase the precision forever because of
   1149 internal exception. Otherwise one gets either a segmentation fault (with
   1150 limited stack size) or an assertion failure (with unlimited stack size,
   1151 e.g. with "make check").
   1152 
   1153 Do not use code with side effects inside MPFR_ASSERTD or MPFR_ASSERTN,
   1154 as assertion checking can be disabled. If a variable is set only to test
   1155 it in an MPFR_ASSERTD expression, the MPFR_DBGRES macro should be used
   1156 with the assignment as its argument, e.g.
   1157   int inex;
   1158   MPFR_DBGRES (inex = mpfr_set (y, x, rnd));
   1159   MPFR_ASSERTD (inex == 0);
   1160 
   1161 Exception handling (overflow/underflow in particular):
   1162   * Warning: To detect exceptions and/or possible error loss due to
   1163     internal exceptions, testing whether some variable is singular with
   1164     MPFR_IS_SINGULAR is generally not sufficient! Indeed, in case of
   1165     overflow (resp. underflow), the value may be rounded (in absolute
   1166     value) to the largest finite number (resp. to the smallest non-zero
   1167     number, possible even in round-to-nearest mode).
   1168   * The MPFR_BLOCK* macros can be useful, e.g.
   1169       {
   1170         MPFR_BLOCK_DECL (flags);
   1171         /* ... */
   1172         MPFR_BLOCK (flags, /* expression or statements */)
   1173         /* ... */
   1174         if (MPFR_OVERFLOW (flags))
   1175           { /* case of overflow in expression or statements */ }
   1176         /* ... */
   1177       }
   1178     See mpfr-impl.h (search for MPFR_BLOCK) for more information.
   1179 
   1180 ===========================================================================
   1181 
   1182 If you plan to add a new threshold in MPFR which could be tuned,
   1183 you should add its default value in the file `mparam_h.in'. When the
   1184 script configure finishes, it creates the file `mparam.h' from `mparam_h.in'.
   1185 
   1186 Then you needs to modify the program `tuneup.c' to allow it to compute
   1187 the new threshold. If it is a classical threshold (not complex), you could
   1188 use this method (example of mpfr_exp):
   1189 
   1190 /* Define the threshold as a variable instead of a constant */
   1191 mpfr_prec_t mpfr_exp_threshold;
   1192 #undef  MPFR_EXP_THRESHOLD
   1193 #define MPFR_EXP_THRESHOLD mpfr_exp_threshold
   1194 /* Include the test function to threshold directly in the test
   1195    program. It will override the mpfr_exp coming from libmpfr.a */
   1196 #include "exp.c"
   1197 /* Define the speed function related to mpfr_exp */
   1198 static double speed_mpfr_exp (struct speed_params *s) {
   1199   SPEED_MPFR_FUNC (mpfr_exp);
   1200 }
   1201 
   1202 Then in the function `all', you will have to call the tune function,
   1203 and write the new THRESHOLD in the file `mparam.h':
   1204 
   1205   /* Tune mpfr_exp */
   1206   if (verbose)
   1207     printf ("Tuning mpfr_exp...\n");
   1208   tune_simple_func (&mpfr_exp_threshold, speed_mpfr_exp);
   1209   fprintf (f, "#define MPFR_EXP_THRESHOLD %lu\n",
   1210            (unsigned long) mpfr_exp_threshold);
   1211 
   1212 More complex tuning is possible but needs special attention.
   1213 
   1214 ===========================================================================
   1215 
   1216 MPFR uses many macros, thus finding where an error occurs exactly may
   1217 be difficult when it is in some macro expansion. For GCC users, a new
   1218 experimental -ftrack-macro-expansion option has been added in GCC 4.7.
   1219 "It allows the compiler to emit diagnostic about the current macro
   1220 expansion stack when a compilation error occurs in a macro expansion."
   1221 <https://gcc.gnu.org/gcc-4.7/changes.html>
   1222 
   1223 ===========================================================================
   1224 
   1225 Bit Twiddling Hacks - Sean Eron Anderson maintain a list of tricks to get
   1226 efficient code on <https://graphics.stanford.edu/~seander/bithacks.html>.
   1227 WARNING: some of those tricks may not take into account possible overflows,
   1228 and may not be portable.
   1229 
   1230 ===========================================================================
   1231 
   1232 MPFR manual (mpfr.texi):
   1233   * Use "significand", not "mantissa".
   1234   * Use "decimal-point character" (as in ISO C) when the meaning is
   1235     the corresponding character ("." or ",", depending on the locale),
   1236     not "decimal point", "decimal separator", "fractional point", or
   1237     "radix point" (the latter is fine with a mathematical meaning).
   1238     This is just the name of this character (as originally defined
   1239     for base 10) and does not imply a number written in decimal.
   1240     Note: POSIX uses the term "radix character".
   1241   * Use "@minus{}" for the minus character, not "-".
   1242   * Warning! Texinfo is not like TeX. Whitespace is preserved in the
   1243     info file. So, do not use additional space for .texi indentation.
   1244     This also means that you need to care about the typography. Please
   1245     read Section "Inserting Space" in the Texinfo manual.
   1246   * Follow the English typography (no space before punctuation marks,
   1247     double space after a period, etc.), not the French one.
   1248 
   1249 The MPFR manual in DVI/PS/PDF formats should have an a4 papersize, as
   1250 declared in mpfr.texi (@afourpaper command). The DVI file format (.dvi)
   1251 traditionally does not contain papersize information, which has two
   1252 consequences:
   1253   * When viewing a .dvi file, one gets the papersize from global settings,
   1254     which may differ from the papersize declared in the mpfr.texi file.
   1255     In particular, a4 text on letter paper can be truncated, depending on
   1256     the margins.
   1257   * Since the .ps file is built from the .dvi file and makeinfo does not
   1258     provide the papersize information to the dvips command, the .ps file
   1259     can get a wrong papersize, depending on the settings on the machine
   1260     where this file is generated. Papersize information should be checked
   1261     before distributing the .ps file.
   1262 Nowadays, .dvi files can contain papersize information via "specials",
   1263 and texinfo.tex has been updated to include such information. However,
   1264 the interpretation of such data is based on a common agreement between
   1265 drivers rather on a standard. In short, the papersize issues should no
   1266 longer appear, but this should be checked manually. The bug report:
   1267 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=874632
   1268 
   1269 ===========================================================================
   1270 
   1271 Running "make" outputs a lot of information, and warnings are not very
   1272 visible. The following tool "eet" allows a copy of warning messages to
   1273 be output to a different window (e.g. xterm or zenity):
   1274 
   1275   https://www.vinc17.net/unix/#eet
   1276 
   1277 Direct link to the tarball: https://www.vinc17.net/unix/eet.tar.xz
   1278 
   1279 ===========================================================================
   1280 
   1281 Be careful when avoiding "'var' may be used uninitialized in this function"
   1282 warnings from gcc. Initializing such variables to a dummy value has several
   1283 drawbacks:
   1284   * this may prevent other tools (that do static or dynamic analysis) from
   1285     detecting bugs;
   1286   * this makes code maintenance more difficult (e.g. when modifying the
   1287     code, one may more easily forget a real initialization);
   1288   * this makes the compiler add useless code (though this should not be
   1289     significant).
   1290 
   1291 The INITIALIZED macro can be used to avoid such warnings with gcc, e.g.
   1292 
   1293   int INITIALIZED(i);
   1294 
   1295 It uses the "int i = i;" pseudo-initialization trick, disabled with other
   1296 compilers as this is undefined behavior. See:
   1297 
   1298   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36296
   1299 
   1300 If a dummy initialization must be added, use preferably an "invalid" value
   1301 (e.g. NULL for pointers, or a value that can be checked with MPFR_ASSERTN
   1302 before using it) that could make the program abort instead of returning an
   1303 incorrect value in case of a bug in MPFR.
   1304 
   1305 ===========================================================================
   1306 
   1307 Avoid mixing signed and unsigned integer types, as this can lead signed
   1308 types to be automatically converted into unsigned types (usual arithmetic
   1309 conversions). If such a signed type contains a negative value, the result
   1310 may be incorrect on some platforms. With MPFR 2.x, this problem could
   1311 arise with mpfr_exp_t, which is signed, and mpfr_prec_t (mp_prec_t),
   1312 which was unsigned (it is now signed), meaning that in general, a cast
   1313 of a mpfr_prec_t to a mpfr_exp_t was needed.
   1314 
   1315 Note that such bugs are difficult to detect because they may depend on
   1316 the platform (e.g., on LP64, 32-bit unsigned int + 64-bit long will give
   1317 a signed type, but on ILP32, 32-bit int + 32-bit unsigned long will give
   1318 an unsigned type, which may not be what is expected), but also on the
   1319 input values. So, do not rely on tests very much. However, if a test
   1320 works on 32 bits but fails on 64 bits in the extended exponent range
   1321 (or conversely), the cause may be related to the integer types (e.g. a
   1322 signness problem or an integer overflow due to different type sizes).
   1323 
   1324 For instance, in MPFR, such issues were fixed in r1992 and r5588.
   1325 
   1326 An example that will fail with 32-bit int and long:
   1327 
   1328     long long umd(void)
   1329     {
   1330       long a = 1;
   1331       unsigned int b = 2;
   1332       return a - b;
   1333     }
   1334 
   1335 When creating a new variable that will always contain non-negative values,
   1336 it is generally better to define it as a signed type if it may be used in
   1337 an arithmetic expression. The exceptions are when the value is seen as an
   1338 array of bits (e.g. for limbs) and to temporarily avoid integer overflow.
   1339 
   1340 ===========================================================================
   1341 
   1342 To use features related to types larger than type long, "mpfr-intmax.h"
   1343 must be included before "mpfr-impl.h".
   1344 
   1345 The intmax_t and uintmax_t types can be used only if _MPFR_H_HAVE_INTMAX_T
   1346 is defined. In this case, the printf / gmp_printf length specifier "j" can
   1347 be used only when NPRINTF_J is not defined.
   1348 
   1349 For internal use, mpfr-intmax.h also unconditionally defines mpfr_intmax_t,
   1350 mpfr_uintmax_t, MPFR_UINTMAX_MAX, MPFR_INTMAX_MAX, MPFR_INTMAX_MIN and
   1351 the corresponding length specifier MPFR_INTMAX_FSPEC.
   1352 
   1353 Warning! mpfr_intmax_t may be smaller than intmax_t if NPRINTF_J is defined.
   1354 
   1355 ===========================================================================
   1356 
   1357 Use mpfr_prec_t and mpfr_rnd_t instead of the old types mp_prec_t and
   1358 mp_rnd_t. Similarly, use mpfr_exp_t instead of GMP's mp_exp_t type
   1359 (unless you really want mp_exp_t, e.g. for conversions with mpf; but
   1360 you must not assume that mpfr_exp_t and mp_exp_t are identical).
   1361 
   1362 ===========================================================================
   1363 
   1364 How to specify (for reading) the minimum exponent or the maximum exponent
   1365 in the MPFR source depends on the context.
   1366 
   1367 1. The most portable form is mpfr_get_emin() and mpfr_get_emax(). In
   1368    the MPFR source, this is equivalent to __gmpfr_emin and __gmpfr_emax
   1369    respectively (macros are defined in mpfr-impl.h; the only difference
   1370    is that the macros do not evaluate to a lvalue).
   1371 
   1372 2. If the exponent range has been extended, you can use the constants
   1373    MPFR_EMIN_MIN and MPFR_EMAX_MAX instead. This will be faster if TLS
   1374    is enabled. It also avoids a bug on some Linux/Sparc machines with
   1375    some GCC versions and TLS, but this shouldn't be the primary concern,
   1376    as this might be the other way round on some other machines. This is
   1377    the most common context.
   1378 
   1379 3. If you want the minimum and maximum possible exponent values supported
   1380    by MPFR, use MPFR_EMIN_MIN and MPFR_EMAX_MAX respectively.
   1381 
   1382 4. If you want the minimum and maximum values supported by the mpfr_exp_t
   1383    type (i.e. the limits of this type), use MPFR_EXP_MIN and MPFR_EXP_MAX
   1384    respectively. This may be useful for intermediate computations on the
   1385    exponents.
   1386 
   1387 More on exponent handling:
   1388 
   1389 * The mpfr_exp_t type has at least 32 bits since it must contain the
   1390   default exponent range.
   1391 
   1392 * The range of valid exponents is defined so that if a and b are two
   1393   valid exponents (i.e. between MPFR_EMIN_MIN and MPFR_EMAX_MAX), then
   1394    a  b  1 fits in a mpfr_exp_t.
   1395 
   1396 * The unsigned type corresponding to mpfr_exp_t is mpfr_uexp_t. It may be
   1397   useful if the considered values are non-negative and don't necessarily
   1398   fit in mpfr_exp_t. To convert a non-negative mpfr_exp_t to mpfr_uexp_t,
   1399   you should use the MPFR_UEXP macro, which is defined as:
   1400     #define MPFR_UEXP(X) (MPFR_ASSERTD ((X) >= 0), (mpfr_uexp_t) (X))
   1401 
   1402 * If a mpfr_exp_t appears in arithmetic expressions together with ISO C90
   1403   types int and/or long, computations must be done with the largest type,
   1404   which is provided by mpfr_eexp_t.
   1405 
   1406 * If a mpfr_exp_t needs to be converted from or to a MPFR number, the
   1407   mpfr_set_exp_t or mpfr_get_exp_t macro should be used.
   1408 
   1409 * If a mpfr_exp_t needs to be converted into a character string with a
   1410   formatted output function (fprintf, printf, sprintf), the mpfr_eexp_t
   1411   type should be used, together with the MPFR_EXP_FSPEC specifier, e.g.
   1412 
   1413     printf ("%" MPFR_EXP_FSPEC "d", (mpfr_eexp_t) exponent);
   1414 
   1415 For implementation details, see the mpfr.h and mpfr-impl.h files.
   1416 
   1417 ===========================================================================
   1418 
   1419 Be careful that the ternary value (a.k.a. "inexact") is not guaranteed
   1420 to be -1, 0, or 1, in general (for some functions, the exact value may
   1421 contain other information, such as midpoint cases with MPFR_EVEN_INEX),
   1422 and the exact behavior may change in the future. So, it is not correct
   1423 to multiply ternary values returned by arbitrary functions as this may
   1424 overflow.
   1425 
   1426 To work with ternary values, mpfr-impl.h provides the following macros:
   1427 
   1428 #define SIGN(I) ((I) < 0 ? -1 : (I) > 0)
   1429 #define SAME_SIGN(I1,I2) (SIGN (I1) == SIGN (I2))
   1430 
   1431 ===========================================================================
   1432 
   1433 Because of a bug in the Mac OS X 10.5 linker, avoid tentative definitions
   1434 (C99, 6.9.2). Depending on the context, use either a simple declaration
   1435 (with the "extern" storage-class specifier) or an external definition.
   1436 This is also cleaner.
   1437 
   1438 ===========================================================================
   1439 
   1440 In case of detected internal error, do not use printf() and exit().
   1441 Use assertions (MPFR_ASSERTN) instead.
   1442 
   1443 ===========================================================================
   1444 
   1445 The only compiler known to support _Decimal64 and _Decimal128 is GCC.
   1446 In code related to these types, when the decimal encoding can be BID,
   1447 do not use any conversion between binary and decimal types, otherwise
   1448 GCC will generate from 2 to 3 MB of code (depending on the GCC version)
   1449 in the MPFR shared library when the encoding is BID:
   1450   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96173
   1451   https://gforge.inria.fr/tracker/index.php?func=detail&aid=21849&group_id=136&atid=619
   1452 
   1453 ===========================================================================
   1454 
   1455 When using GNU extensions (based on the value of the __GNUC_* macros), check
   1456 whether they work with ICC. The following paper can give useful information:
   1457 "Intel Compilers for Linux*: Compatibility with GNU Compilers" at
   1458 <https://software.intel.com/articles/intel-compilers-for-linux-compatibility-with-gnu-compilers>.
   1459 
   1460 To detect compilers, see
   1461 
   1462   https://sourceforge.net/p/predef/wiki/Compilers/
   1463 
   1464 ===========================================================================
   1465 
   1466 Note about the formally proven code (src/*_extracted.c):
   1467 
   1468 The code has been proven with types of fixed width (due to a limitation
   1469 of the F*/KreMLin proof system). Thus this code may be used only under
   1470 some conditions, so that MPFR enables it only under such conditions via
   1471 a #if, e.g. in add1sp.c:
   1472 
   1473 #if defined(MPFR_WANT_PROVEN_CODE) && GMP_NUMB_BITS == 64 && \
   1474   UINT_MAX == 0xffffffff && MPFR_PREC_BITS == 64 && \
   1475   _MPFR_PREC_FORMAT == 3 && _MPFR_EXP_FORMAT == _MPFR_PREC_FORMAT
   1476 
   1477 which implies that the #define's in add1sp1_extracted.c
   1478 
   1479 #define int64_t long
   1480 #define uint32_t unsigned int
   1481 #define uint64_t mp_limb_t
   1482 
   1483 are correct.
   1484 
   1485 Be careful with any attempt to reuse the code in a more general context,
   1486 e.g. by removing these #define's and just assuming that the prototypes
   1487 match the ABI. There is another implicit requirement: uint64_t must be
   1488 at least as large as unsigned int. Otherwise the code may become incorrect
   1489 due to integer promotions. The issue of integer promotions about intN_t vs
   1490 int has been mentioned in
   1491 
   1492   https://gcc.gnu.org/pipermail/gcc/2021-November/237726.html
   1493 
   1494 ===========================================================================
   1495 
   1496 For configure tests, use AC_LINK_IFELSE rather than AC_COMPILE_IFELSE,
   1497 which is broken by design. The reason is that some errors just produce
   1498 a warning (which is not a bug from the compiler: in ISO C terminology,
   1499 this corresponds to a diagnostic, and the compilation is allowed to
   1500 succeed), and this is unfixable in a portable way.
   1501 
   1502 ===========================================================================
   1503 
   1504 Shell portability
   1505 -----------------
   1506 
   1507 Shell commands (in /bin/sh scripts, in Makefile and autotools related
   1508 files...) need to be valid in POSIX shells, but also in Bourne shells
   1509 (for instance, /bin/sh under Solaris is a Bourne shell).
   1510 
   1511 In particular:
   1512 
   1513 * Do not use $(...) but `...` (backticks).
   1514 
   1515 * Be careful that quote nesting with backticks such as "`cmd "$foo"`"
   1516   is not portable:
   1517 
   1518     https://unix.stackexchange.com/q/387246/74516
   1519     ("quotes inside backticks inside quotes in ksh")
   1520 
   1521   But the external quotes are not needed when assigning to a variable:
   1522 
   1523     out=`cmd "$foo"`
   1524 
   1525   Otherwise one can write "`cmd \"$foo\"`".
   1526 
   1527 ===========================================================================
   1528 
   1529 About the test suite
   1530 --------------------
   1531 
   1532 When adding a test file for a new function (say mpfr_func), you can use
   1533 the following prototype tfunc.c (to put in the directory 'tests').
   1534 This file performs random tests for values of x between -5 and 5, with
   1535 a precision varying from 2 to 100.
   1536 
   1537 You can add your own tests to this basic file. When adding the expected
   1538 result, do NOT use the one obtained from the MPFR function! Otherwise,
   1539 if this function is buggy, the test will be wrong and the function will
   1540 remain buggy. For random tests, avoid mpfr_urandomb as its values are
   1541 not truly random due to how it is specified (if the exponent is less
   1542 than 0, some of the trailing bits will necessarily be 0).
   1543 
   1544 Do not forget to add 'tfunc' in the variable check_PROGRAMS
   1545 of the tests/Makefile.am file.
   1546 
   1547 /* Test file for mpfr_func.
   1548 
   1549 Copyright 2023 Free Software Foundation, Inc.
   1550 Contributed by the AriC and Caramba projects, INRIA.
   1551 
   1552 This file is part of the GNU MPFR Library.
   1553 
   1554 The GNU MPFR Library is free software; you can redistribute it and/or modify
   1555 it under the terms of the GNU Lesser General Public License as published by
   1556 the Free Software Foundation; either version 3 of the License, or (at your
   1557 option) any later version.
   1558 
   1559 The GNU MPFR Library is distributed in the hope that it will be useful, but
   1560 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   1561 or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
   1562 License for more details.
   1563 
   1564 You should have received a copy of the GNU Lesser General Public License
   1565 along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
   1566 https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
   1567 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
   1568 
   1569 #include "mpfr-test.h"
   1570 
   1571 #define TEST_FUNCTION mpfr_func
   1572 #define TEST_RANDOM_EMIN -5
   1573 #define TEST_RANDOM_EMAX 5
   1574 #include "tgeneric.c"
   1575 
   1576 int
   1577 main (int argc, char *argv[])
   1578 {
   1579   tests_start_mpfr ();
   1580 
   1581   test_generic (2, 100, 100);
   1582 
   1583   tests_end_mpfr ();
   1584   return 0;
   1585 }
   1586 
   1587    ---------------------------------------------------------------------
   1588 
   1589 Here is how the test suite works since the full Automake 1.13 support
   1590 (merge of the vl-am113 branch in r8821).
   1591 
   1592 The tests_start_mpfr function, which should be called at the beginning
   1593 of each test program (unless nothing is tested and main() just contains
   1594 "return 77;"), starts by calling the test_version function, whose goal
   1595 is to do various header/library version checks of GMP and MPFR. In case
   1596 of mismatch between a header and a library, an error message is output
   1597 ("make check" will redirect it to a log file). Then there are 3 cases:
   1598 
   1599 1. An error in the MPFR version check is a fatal error: test_version()
   1600    exits with an error (exit status = 1). The reason is that a different
   1601    MPFR library (somewhere in some library search path) would probably
   1602    be tested, so that the results of the test would be meaningless.
   1603 
   1604 2. An error in the GMP version check is a non-fatal error: if there are
   1605    no errors in MPFR version check, test_version() returns with value 1.
   1606    However, the tversion test program will regard this as a fatal error
   1607    (thus "make check" will fail). The probable reason of the mismatch is
   1608    that the GMP library has been upgraded while the MPFR test suite has
   1609    not been rebuilt; otherwise there is probably something wrong in the
   1610    GMP installation.
   1611 
   1612 3. Otherwise test_version() returns with value 0 (everything is fine).
   1613 
   1614 Note: The tests_start_mpfr function does a setbuf on stdout to disable
   1615 buffering. As a consequence, no operations on stdout (such as printf)
   1616 must be done before this function is called.
   1617 
   1618 With Automake 1.13+, the tests are run in parallel if a -j make option
   1619 is used. In case of failure, information can be found in the log file
   1620 of each failed test program and in the global tests/test-suite.log file
   1621 (which is output automatically if the VERBOSE environment variable is
   1622 set to 1). If no tests fail, then the tests/tversion.log file is output
   1623 after the "testsuite summary"; it contains various useful information
   1624 about the MPFR build.
   1625 
   1626 To use a wrapper to run the tests, such as valgrind or wine, define
   1627 LOG_COMPILER, e.g.:
   1628   LOG_COMPILER="valgrind -q --error-exitcode=1 --leak-check=full" make check
   1629   LOG_COMPILER=wine make check
   1630 
   1631 More information about the parallel test harness:
   1632 https://www.gnu.org/software/automake/manual/automake.html#Parallel-Test-Harness
   1633 
   1634    ---------------------------------------------------------------------
   1635 
   1636 In the tests, do not use `mpfr_set_d` (except when testing it), as the
   1637 result will depend on the floating-point arithmetic of the system;
   1638 this has shown many problems in the past and problems may still occur
   1639 with new systems. Use `mpfr_set_si` or `mpfr_set_str` instead.
   1640 
   1641 To check the result of some function, use mpfr_equal_p rather than
   1642 mpfr_cmp, as mpfr_cmp will return 0 (equality) if the result is NaN.
   1643 
   1644 Do not use functions that need optional features (except in a context
   1645 where such features are required). For instance, the mpfr_printf-like
   1646 functions need <stdarg.h> (HAVE_STDARG defined), thus should not be
   1647 used, except for testing them.
   1648 
   1649 For temporary result files created by test programs, choose a unique
   1650 filename to avoid conflicts in parallel tests. To ensure that, the
   1651 filename should start with the name of the test program (for instance,
   1652 "tfprintf_out.txt" for tfprintf.c). Add the filename to CLEANFILES in
   1653 the tests/Makefile.am file.
   1654 
   1655 In case of failure of a test, freeing the memory explicitly before exiting
   1656 is not necessary. We do this in case of success just to be able to detect
   1657 memory leaks in MPFR.
   1658 
   1659 Also, try to make sure that the tests run against previous MPFR versions,
   1660 possibly by disabling some tests with code like
   1661 
   1662   #if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0)
   1663 
   1664 It is possible to check out the tests from a branch, e.g. master, with
   1665 
   1666   git checkout master -- tests/
   1667 
   1668 But to avoid the update of tests/Makefile.am with new tests, which
   1669 would probably fail as these new tests are typically written for new
   1670 MPFR functions, the following may be better:
   1671 
   1672   git checkout master -- 'tests/*.c' 'tests/*.h'
   1673 
   1674 Note that (as seen with "git status") since the corresponding changes are
   1675 put in the index and there is no intent to commit, you should also do
   1676 
   1677   git restore --staged tests
   1678 
   1679    ---------------------------------------------------------------------
   1680 
   1681 Test function-like macros associated with functions
   1682   * for side effects in argument evaluation (arguments must always be
   1683     evaluated once);
   1684   * for support of types that would be eligible to implicit type conversion
   1685     with the function. Be careful: C and C++ have different rules.
   1686 
   1687 Support "gcc -Werror=c++-compat" and g++, possibly with -DMPFR_USE_NO_MACRO
   1688 in CFLAGS. The following was added to mpfr-test.h:
   1689 
   1690 #if defined (__cplusplus)
   1691 #define VOIDP_CAST(X) (X)
   1692 #else
   1693 #define VOIDP_CAST(X) ((void *) (X))
   1694 #if defined (__GNUC__)
   1695 #define IGNORE_CPP_COMPAT
   1696 #endif
   1697 #endif
   1698 
   1699 For instance, in tcopysign.c, since mpfr_copysign is implemented both as
   1700 a function and as a function-like macro:
   1701 
   1702   int a = 0, b = 0, c = 0;
   1703 [...]
   1704 #ifdef IGNORE_CPP_COMPAT
   1705 #pragma GCC diagnostic push
   1706 #pragma GCC diagnostic ignored "-Wc++-compat"
   1707 #endif
   1708       mpfr_copysign ((a++, VOIDP_CAST(z)),
   1709                      (b++, VOIDP_CAST(p)),
   1710                      (c++, VOIDP_CAST(y)), rnd_mode);
   1711 #ifdef IGNORE_CPP_COMPAT
   1712 #pragma GCC diagnostic pop
   1713 #endif
   1714       MPFR_ASSERTN (a == 1);
   1715       MPFR_ASSERTN (b == 1);
   1716       MPFR_ASSERTN (c == 1);
   1717 
   1718    ---------------------------------------------------------------------
   1719 
   1720 To check the coverage of the test suite, you can use gcov.
   1721 To get accurate information, do not enable optimizations.
   1722 
   1723    ./configure CFLAGS="--coverage"
   1724    make clean
   1725    make check
   1726    find . -name '*.c' -exec gcov '{}' ';' | grep "lines executed" | sort
   1727 
   1728 For each source file, there is a .c.gcov file which contains much more
   1729 information.
   1730 
   1731 Another solution is to run the script 'coverage' within the 'tools' directory.
   1732 
   1733    ---------------------------------------------------------------------
   1734 
   1735 To run the MPFR test suite under valgrind, you may need to do several
   1736 things.
   1737 
   1738 First, as the running time is much longer than usual, you should not use
   1739 the --enable-tests-timeout configure option, or set the timeout value to
   1740 a large value; this can be done at run time, e.g. with
   1741 
   1742   export MPFR_TESTS_TIMEOUT=0
   1743 
   1744 to disable the timeout, so that you do not need to rebuild MPFR for
   1745 this purpose.
   1746 
   1747 Then just set the LOG_COMPILER environment variable to something like
   1748 
   1749   valgrind -q --error-exitcode=1 --leak-check=full
   1750 
   1751 before running "make check", or type directly:
   1752 
   1753   LOG_COMPILER="valgrind -q --error-exitcode=1 --leak-check=full" make check
   1754 
   1755 NOTE: with the new tests/Makefile.am file, the following is obsolete;
   1756 but it might still be useful under some occasions, e.g. if all the
   1757 valgrind output needs to be sent to a single file.
   1758 
   1759 Before running valgrind, you should run "make check" a first time so
   1760 that everything is compiled out of valgrind.
   1761 
   1762 Then you need the --trace-children=yes valgrind option (a possible
   1763 exception is when you run an individual test that has been built
   1764 statically). The reason is that libtool generates wrapper scripts
   1765 to link the tests against the right libraries. The drawback is that
   1766 you will get valgrind output for all the processes, including the
   1767 shell commands from the wrapper scripts (the --trace-children-skip
   1768 valgrind option will not allow you to filter every unwanted process).
   1769 But you can filter the output with:
   1770 
   1771   sed -n '/= Command: [^ ]*\/\.libs\/lt-/,/= ERROR SUMMARY:/p'
   1772 
   1773 For readability, you should redirect the valgrind output to a file.
   1774 You can use --log-file, but due to --trace-children=yes, you need
   1775 the %p format specifier in the filename argument to generate a file
   1776 for each child; however, many files will be generated, and it may be
   1777 better to use the following method to get a single file:
   1778 
   1779   valgrind --trace-children=yes --log-fd=3 make check 3> vg.out
   1780 
   1781 then
   1782 
   1783   sed -n '/= Command: [^ ]*\/\.libs\/lt-/,/= ERROR SUMMARY:/p' vg.out
   1784 
   1785 to get only the valgrind output corresponding to the MPFR tests.
   1786 
   1787 Or if your shell supports it, you can use a process substitution
   1788 to filter the valgrind output directly to a file, e.g. with bash
   1789 or zsh:
   1790 
   1791   valgrind --trace-children=yes --log-fd=3 make check 3> >(sed -n \
   1792     '/= Command: [^ ]*\/\.libs\/lt-/,/= ERROR SUMMARY:/p' > vg.out)
   1793 
   1794 if you do not mind about the buffering delays.
   1795 
   1796    ---------------------------------------------------------------------
   1797 
   1798 NOTE: with "AM_LDFLAGS = -no-install" in tests/Makefile.am, the following
   1799 is obsolete, as libtool no longer generates wrapper scripts; but it is left
   1800 here in case negative effects of "AM_LDFLAGS = -no-install" are seen or for
   1801 users with a special setup.
   1802 
   1803 To debug some test program, e.g. tadd, with gdb, you cannot run "gdb tadd"
   1804 since libtool has generated a wrapper script to link the program against
   1805 the correct MPFR library. Instead, run:
   1806 
   1807   libtool --mode=execute gdb tadd
   1808 
   1809 Alternatively, something like
   1810 
   1811   LD_PRELOAD=../src/.libs/libmpfr.so gdb .libs/tadd
   1812 
   1813 may also work (example for GNU/Linux).
   1814 
   1815 Note: for test programs not listed in Makefile.am (check_PROGRAMS),
   1816 libtool is not used (a static link against MPFR is done via LOADLIBES
   1817 in Makefile.am), so that gdb should be used in the conventional way.
   1818 You can use the following wrapper script to have a command that works
   1819 with both:
   1820 
   1821 ------------------------------------------------------------
   1822 #!/bin/sh
   1823 
   1824 unset cmd
   1825 case $1 in
   1826   -*) ;;
   1827   ?*) test "x$(head -c 2 "$1")" = 'x#!' && \
   1828       grep -q "^# Generated by libtool" "$1" && \
   1829       cmd="libtool --mode=execute" ;;
   1830 esac
   1831 
   1832 exec $cmd gdb "$@"
   1833 ------------------------------------------------------------
   1834 
   1835 and
   1836 
   1837   alias gdb='/path/to/the/wrapper/script'
   1838 
   1839 ===========================================================================
   1840 
   1841 To cross-compile MPFR for i686-w64-mingw32 and test it under Wine:
   1842 
   1843 0. Install wine (at least the 32-bit version).
   1844 
   1845 1. Build and install GMP.
   1846 
   1847 In the GMP source directory:
   1848 $ ./configure --host=i686-w64-mingw32 --disable-shared --prefix=...
   1849 $ make
   1850 $ make check LOG_COMPILER=wine
   1851 $ make install
   1852 
   1853 Note: With MinGW earlier than v8.0.0, the -D__USE_MINGW_ANSI_STDIO option
   1854 may be necessary in order to get an ISO-conforming printf as mentioned in
   1855 MPFR's INSTALL file.
   1856 
   1857 2. Build and check MPFR.
   1858 
   1859 In the MPFR source directory:
   1860 $ ./configure --host=i686-w64-mingw32 --disable-shared --with-gmp=...
   1861 $ make
   1862 $ make check LOG_COMPILER=wine
   1863 
   1864 Note: Due to bugs in autoconf[1] and dash[2], the configure script
   1865 may create files with a binary filename or have any other arbitrary
   1866 behavior if /bin/sh is dash. The cause is that it tries to execute
   1867 a MS Windows executable, which is interpreted as a shell script by
   1868 dash (thus with random, meaningless commands).
   1869 
   1870 [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850329
   1871 [2] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=816313
   1872 
   1873 ===========================================================================
   1874 
   1875 After a MPFR build, the list of GMP symbols used by this particular MPFR
   1876 build can be obtained as follows:
   1877 
   1878   nm -u src/.libs/libmpfr.so | sed -n 's/^ *U \(__gmp.*\)/\1/p'
   1879 
   1880 at least under Linux, the library name and the "nm" behavior being
   1881 non-portable (adding the POSIX "-P" option may help, but there are
   1882 still differences between platforms).
   1883 
   1884 Note that this list may depend on various parameters, such as the
   1885 architecture and the compilation options.
   1886 
   1887 GMP internal symbols used by MPFR can be detected with the following
   1888 shell command (just replace /path/to/gmp.h by the actual pathname):
   1889 
   1890 nm -u src/.libs/libmpfr.so | sed -n 's/^ *U \(__gmp.*\)/\1/p' | \
   1891 while read s
   1892 do
   1893   case $s in
   1894     __gmpn_*) regex="__MPN(${s#__gmpn_})" ;;
   1895     *)        regex="$s" ;;
   1896   esac
   1897   grep -q "^#define .* ${regex}$" /path/to/gmp.h || echo "Internal: $s"
   1898 done
   1899 
   1900 A similar check can be done with "make check-gmp-symbols".
   1901 
   1902 One can also check that MPFR does not define exported symbols with a
   1903 prefix outside "mpfr_" and "__gmpfr_" by using "nm -g" and filtering
   1904 at least the "U" lines. But this can only be a manual check to avoid
   1905 false positives. Checking that a GMP reserved prefix is not used can
   1906 be done automatically, as with "make check-exported-symbols".
   1907 
   1908 ===========================================================================
   1909 
   1910 To update the FAQ, checkout the misc directory of the repository root.
   1911 Modify the faq.xhtml file and run
   1912 
   1913   xsltproc --nodtdattr faq-web.xsl faq.xhtml > www/faq.html
   1914 
   1915 Check with "git diff" that this change has been done correctly (in case
   1916 of incorrect installation of XML tools), validate the files with
   1917 
   1918   xmllint --noout --loaddtd --valid faq.xhtml www/faq.html
   1919 
   1920 and if everything is OK (no error messages), commit both files.
   1921 
   1922 Update the FAQ.html file with update-faq in the doc directory of the
   1923 MPFR master and supported release branches.
   1924 
   1925 ===========================================================================
   1926 
   1927 Spelling:
   1928   * Some suggestions: https://gcc.gnu.org/codingconventions.html#Spelling
   1929   * Check with "codespell" (done by mpfrlint).
   1930 
   1931 ===========================================================================
   1932 
   1933 Git:
   1934   * When creating a branch, add an associated <branch>-root tag on the
   1935     root commit (i.e. just before the first commit in the new branch).
   1936     This can be useful for commands like "git diff <branch>-root" to get
   1937     the commits done in the branch since its creation, and such tags are
   1938     used in tests/Makefile.am for output_info (Git information output by
   1939     "make check").
   1940