Copyright 2000-2016 Free Software Foundation, Inc.
Contributed by the AriC and Caramba projects, INRIA.

This file is part of the GNU MPFR Library.

The GNU MPFR Library is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

The GNU MPFR Library is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
License for more details.

You should have received a copy of the GNU Lesser General Public License
along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

##############################################################################

The GNU MPFR distribution contains the following files:
(This does not apply to code retrieved by Subversion.)

AUTHORS         - the authors of the library
BUGS            - bugs in MPFR - please read this file!
COPYING         - the GNU General Public License, version 3
COPYING.LESSER  - the GNU Lesser General Public License, version 3
ChangeLog       - the log of changes
INSTALL         - how to install MPFR (see also mpfr.texi)
Makefile*       - files for building the library
NEWS            - new features with respect to previous versions
PATCHES         - empty file (until patches are applied)
README          - this file
TODO            - what remains to do (any help is welcome!)
VERSION         - version of MPFR (next release version if taken by Subversion)
ac*.m4          - automatic configuration files
ar-lib          - auxiliary installation file
compile         - auxiliary installation file
config.*        - auxiliary installation files
configure*      - configuration files
depcomp         - auxiliary installation file
doc/            - directory containing the documentation (manual, FAQ)
examples/       - directory containing examples
install-sh      - installation file
ltmain.sh       - auxiliary installation file
m4/             - directory containing additional configuration files
missing         - auxiliary installation file
src/            - directory containing the MPFR source
test-driver     - auxiliary installation file
tests/          - directory containing the testsuite (for "make check")
tools/          - directory containing various tools
tune/           - directory containing files for tuning MPFR

According to the special exception to the GNU General Public License,
the autotools files compile, config.sub, config.guess, ltmain.sh,
m4/libtool.m4 and missing are distributed under the same licence of
GNU MPFR.

For any copyright year range specified as YYYY-ZZZZ in this package,
note that the range specifies every single year in that closed interval.


You can get the latest source code by Subversion at InriaForge:

  svn checkout svn://scm.gforge.inria.fr/svn/mpfr/trunk mpfr

or

  svn checkout https://scm.gforge.inria.fr/svn/mpfr/trunk mpfr

(the last argument can be any directory name). You can use

  svn ls svn://scm.gforge.inria.fr/svn/mpfr/branches
  svn ls svn://scm.gforge.inria.fr/svn/mpfr/tags

to get the list of branches or tags (releases), then checkout a
particular branch or tag instead of the trunk. Alternatively, you
can now use the "https:" scheme (a.k.a. DAV) instead of "svn:".
For more information about Subversion, please see:

  * http://svnbook.red-bean.com/ (the official Subversion book);
  * https://gcc.gnu.org/wiki/SvnHelp (written for GCC developers,
    but interesting general information can be found there);
  * http://subversion.apache.org/faq.html (the Subversion FAQ).

Subversion users should read the file "doc/README.dev" (provided via
SVN only).
