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