gnu: stunnel: Update to 5.50.
[jackhill/guix/guix.git] / gnu / packages / multiprecision.scm
... / ...
CommitLineData
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012, 2013, 2015 Ludovic Courtès <ludo@gnu.org>
3;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
4;;; Copyright © 2015, 2018 Andreas Enge <andreas@enge.fr>
5;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
6;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
7;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
8;;; Copyright © 2018 Eric Bavier <bavier@member.fsf.org>
9;;; Copyright © 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
10;;;
11;;; This file is part of GNU Guix.
12;;;
13;;; GNU Guix is free software; you can redistribute it and/or modify it
14;;; under the terms of the GNU General Public License as published by
15;;; the Free Software Foundation; either version 3 of the License, or (at
16;;; your option) any later version.
17;;;
18;;; GNU Guix is distributed in the hope that it will be useful, but
19;;; WITHOUT ANY WARRANTY; without even the implied warranty of
20;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21;;; GNU General Public License for more details.
22;;;
23;;; You should have received a copy of the GNU General Public License
24;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
25
26(define-module (gnu packages multiprecision)
27 #:use-module (guix licenses)
28 #:use-module (gnu packages)
29 #:use-module (gnu packages autotools)
30 #:use-module (gnu packages m4)
31 #:use-module (gnu packages gcc)
32 #:use-module (guix packages)
33 #:use-module (guix download)
34 #:use-module (guix utils)
35 #:use-module (guix build-system gnu))
36
37(define-public gmp
38 (package
39 (name "gmp")
40 (version "6.1.2")
41 (source (origin
42 (method url-fetch)
43 (uri
44 (string-append "mirror://gnu/gmp/gmp-"
45 version ".tar.xz"))
46 (sha256
47 (base32
48 "04hrwahdxyqdik559604r7wrj9ffklwvipgfxgj4ys4skbl6bdc7"))
49 (patches (search-patches "gmp-faulty-test.patch"))))
50 (build-system gnu-build-system)
51 (native-inputs `(("m4" ,m4)))
52 (outputs '("out" "debug"))
53 (arguments `(#:parallel-tests? #f ; mpz/reuse fails otherwise
54 #:configure-flags
55 '(;; Build a "fat binary", with routines for several
56 ;; sub-architectures.
57 "--enable-fat"
58 "--enable-cxx"
59 ,@(cond ((target-mingw?)
60 ;; Static and shared cannot be built in one go:
61 ;; they produce different headers. We need shared.
62 `("--disable-static"
63 "--enable-shared"))
64 (else '())))))
65 (synopsis "Multiple-precision arithmetic library")
66 (description
67 "@dfn{GMP} (the GNU Multiple Precision Arithmetic Library) is a library for
68arbitrary-precision arithmetic, operating on signed integers, rational numbers
69and floating point numbers. The precision is only limited by the available
70memory. The library is highly optimized, with a design focus on execution
71speed. It is aimed at use in, for example, cryptography and computational
72algebra.")
73 (license lgpl3+)
74 (home-page "https://gmplib.org/")))
75
76(define-public gmp-6.0
77 ;; We keep this one around to bootstrap GCC, to work around a compilation
78 ;; issue on ARM. See
79 ;; <https://gmplib.org/list-archives/gmp-bugs/2015-December/003848.html>.
80 (package
81 (inherit gmp)
82 (version "6.0.0a")
83 (source (origin
84 (method url-fetch)
85 (uri (string-append "mirror://gnu/gmp/gmp-"
86 version ".tar.xz"))
87 (sha256
88 (base32
89 "0r5pp27cy7ch3dg5v0rsny8bib1zfvrza6027g2mp5f6v8pd6mli"))
90 (patches (search-patches "gmp-arm-asm-nothumb.patch"
91 "gmp-faulty-test.patch"))))))
92
93(define-public mpfr
94 (package
95 (name "mpfr")
96 (version "4.0.1")
97 (source (origin
98 (method url-fetch)
99 (uri (string-append "mirror://gnu/mpfr/mpfr-" version
100 ".tar.xz"))
101 (sha256 (base32
102 "0vp1lrc08gcmwdaqck6bpzllkrykvp06vz5gnqpyw0v3h9h4m1v7"))))
103 (build-system gnu-build-system)
104 (outputs '("out" "debug"))
105 (propagated-inputs `(("gmp" ,gmp))) ; <mpfr.h> refers to <gmp.h>
106 (synopsis "C library for arbitrary-precision floating-point arithmetic")
107 (description
108 "GNU@tie{}@dfn{MPFR} (Multiple Precision Floating-Point Reliably) is a C
109library for performing multiple-precision, floating-point computations with
110correct rounding.")
111 (license lgpl3+)
112 (home-page "https://www.mpfr.org/")))
113
114(define-public mpc
115 (package
116 (name "mpc")
117 (version "1.1.0")
118 (source (origin
119 (method url-fetch)
120 (uri (string-append
121 "mirror://gnu/mpc/mpc-" version ".tar.gz"))
122 (sha256
123 (base32
124 "0biwnhjm3rx3hc0rfpvyniky4lpzsvdcwhmcn7f0h4iw2hwcb1b9"))))
125 (build-system gnu-build-system)
126 (outputs '("out" "debug"))
127 (propagated-inputs `(("gmp" ,gmp) ; <mpc.h> refers to both
128 ("mpfr" ,mpfr)))
129 (synopsis "C library for arbitrary-precision complex arithmetic")
130 (description
131 "GNU@tie{}@dfn{MPC} (Multiple Precision Complex library) is a C library for
132performing arithmetic on complex numbers. It supports arbitrarily high
133precision and correctly rounds the results.")
134 (license lgpl3+)
135 (home-page "http://multiprecision.org/mpc/")))
136
137(define-public mpfi
138 (package
139 (name "mpfi")
140 (version "1.5.3")
141 (source
142 (origin
143 (method url-fetch)
144 (uri (string-append "https://gforge.inria.fr/frs/download.php"
145 "/latestfile/181/" name "-" version ".tar.bz2"))
146 (sha256
147 (base32 "0bqr8yibl7jbrp0bw7xk1lm7nis7rv26jsz6y8ycvih8n9bx90r3"))))
148 (build-system gnu-build-system)
149 (propagated-inputs `(("gmp" ,gmp) ; <mpfi.h> refers to both
150 ("mpfr" ,mpfr)))
151 (synopsis "C library for arbitrary-precision interval arithmetic")
152 (description
153 "@dfn{MPFI} (Multiple Precision Floating-point Interval) is a portable C
154library for arbitrary-precision interval arithmetic, with intervals represented
155using MPFR reliable floating-point numbers. It's based on the @dfn{GMP} (GNU
156Multiple Precision Arithmetic) and GNU@tie{}@dfn{MPFR} (Multiple Precision
157Floating-Point Reliably) libraries.
158
159The purpose of arbitrary-precision interval arithmetic is to get results that
160are both guaranteed, thanks to interval computation, and accurate, thanks to
161multiple-precision arithmetic.")
162 (license lgpl2.1+)
163 (home-page "https://perso.ens-lyon.fr/nathalie.revol/software.html")))
164
165(define-public irram
166 (package
167 (name "irram")
168 (version "2013_01")
169 (source
170 (origin
171 (method url-fetch)
172 (uri (string-append "http://irram.uni-trier.de/irram-files/iRRAM_"
173 version ".tar.bz2"))
174 (sha256
175 (base32 "1cdmvb4hsa161rfdjqyhd9sb3fcr43p3a6nsj7cb4kn9f94qmjpj"))))
176 (build-system gnu-build-system)
177 (propagated-inputs `(("gmp" ,gmp) ; <mpfi.h> refers to both
178 ("mpfr" ,mpfr)))
179 (arguments
180 `(#:parallel-build? #f))
181 (synopsis "C++ package for real arithmetic based on the Real-RAM concept")
182 (description
183 "@dfn{iRRAM} is a C++ package for error-free real arithmetic based on
184the concept of a Real-RAM. Its capabilities range from ordinary arithmetic
185over trigonometric functions to linear algebra and differential
186equations. A program using iRRAM is coded in ordinary C++, but may use a
187special class that behaves like real numbers without any
188error. Additionally, iRRAM uses the concept of multi-valued functions.")
189 (license lgpl2.0+)
190 (home-page "http://irram.uni-trier.de/")))
191
192(define-public qd
193 (package
194 (name "qd")
195 (version "2.3.22")
196 (source (origin
197 (method url-fetch)
198 (uri (string-append "http://crd.lbl.gov/~dhbailey/mpdist/qd-"
199 version ".tar.gz"))
200 (sha256
201 (base32
202 "0wpgdzjcbanwd0c9mk90n04nas0q5fwc5zkrlbxyn6yjd2n8k3i6"))))
203 (build-system gnu-build-system)
204 (native-inputs
205 `(("gfortran" ,gfortran)))
206 (arguments
207 `(#:configure-flags `("--disable-enable_fma" ;weird :/
208 "--enable-shared"
209 ,,@(if (string-prefix? "aarch64"
210 (or (%current-target-system)
211 (%current-system)))
212 ;; XXX: The qd_test test fails numerical
213 ;; accuracy checks for 'dd_real::exp()' on
214 ;; aarch64 with GCC 5.4 at -O2. Disabling
215 ;; expensive optimizations lets it pass.
216 '("CXXFLAGS=-O3 -fno-expensive-optimizations")
217 '("CXXFLAGS=-O3")))))
218 (home-page "http://crd-legacy.lbl.gov/~dhbailey/mpdist/")
219 (synopsis "Double-double and quad-double library")
220 (description "This package supports both a double-double
221datatype (approx. 32 decimal digits) and a quad-double datatype (approx. 64
222decimal digits). The computational library is written in C++. Both C++ and
223Fortran-90 high-level language interfaces are provided to permit one to
224convert an existing C++ or Fortran-90 program to use the library with only
225minor changes to the source code. In most cases only a few type statements
226and (for Fortran-90 programs) read/write statements need to be changed. PSLQ
227and numerical quadrature programs are included.")
228 (license bsd-3)))
229
230(define-public tomsfastmath
231 (package
232 (name "tomsfastmath")
233 (version "0.13.1")
234 (synopsis "Large integer arithmetic library")
235 (source (origin
236 (method url-fetch)
237 (uri (string-append "https://github.com/libtom/tomsfastmath/"
238 "releases/download/v" version "/"
239 "tfm-" version ".tar.xz"))
240 (sha256
241 (base32
242 "0f0pmiaskh89sp0q933pafxb914shpaj5ad8sb5rzk1wv8d7mja7"))))
243 (build-system gnu-build-system)
244 (native-inputs
245 `(("libtool" ,libtool)))
246 (arguments
247 `(#:make-flags (list "-f" "makefile.shared"
248 (string-append "LIBPATH=" %output "/lib")
249 (string-append "INCPATH=" %output "/include")
250 "GROUP=root" "USER=root"
251 "CC=gcc")
252 #:phases
253 (modify-phases %standard-phases
254 (delete 'configure) ; no configuration
255 (replace 'check
256 (lambda* (#:key make-flags #:allow-other-keys)
257 (apply invoke "make"
258 "stest" "test_standalone"
259 make-flags)
260 (invoke "./stest")
261 (invoke "./test")))
262 (add-before 'install 'install-nogroup
263 (lambda _
264 ;; Let permissions inherit from the current process.
265 (substitute* "makefile.shared"
266 (("-g \\$\\(GROUP\\) -o \\$\\(USER\\)") ""))
267 #t))
268 (add-after 'install 'install-doc
269 (lambda* (#:key outputs #:allow-other-keys)
270 (let ((docdir (string-append (assoc-ref outputs "out")
271 "/share/doc/tomsfastmath")))
272 (install-file "doc/tfm.pdf" docdir)
273 #t)))
274 (add-after 'install 'install-pc
275 (lambda* (#:key outputs #:allow-other-keys)
276 (let* ((out (assoc-ref outputs "out"))
277 (pc-dir (string-append out "/lib/pkgconfig")))
278 (call-with-output-file "tomsfastmath.pc"
279 (lambda (port)
280 (format port "~
281Name: TomsFastMath
282Description: ~a
283Version: ~a
284Libs: -L~a/lib -ltfm~%"
285 ,synopsis ,version out)))
286 (install-file "tomsfastmath.pc" pc-dir)
287 #t))))))
288 (home-page "https://www.libtom.net/TomsFastMath/")
289 (description "TomsFastMath is a large integer library written in portable
290ISO C. It is a port of LibTomMath with optional support for inline assembler
291multiplies.")
292 (license public-domain)))
293
294(define-public libtommath
295 (package
296 (name "libtommath")
297 (version "1.1.0")
298 (outputs '("out" "static"))
299 (source
300 (origin
301 (method url-fetch)
302 (uri (string-append "https://github.com/libtom/libtommath/releases/"
303 "download/v" version "/ltm-" version ".tar.xz"))
304 (sha256
305 (base32
306 "1bbyagqzfdbg37k1n08nsqzdf44z8zsnjjinqbsyj7rxg246qilh"))
307 (patches (search-patches "libtommath-fix-linkage.patch"))))
308 (build-system gnu-build-system)
309 (arguments
310 '(#:phases
311 (modify-phases %standard-phases
312 (delete 'configure) ; no configure
313 (add-after 'unpack 'prepare-build
314 (lambda _
315 ;; Don't pull in coreutils.
316 (substitute* "makefile_include.mk"
317 (("arch") "uname -m"))
318
319 ;; We want the shared library by default so force it to be the
320 ;; default makefile target.
321 (delete-file "makefile")
322 (symlink "makefile.shared" "makefile")
323 #t))
324 (add-after 'install 'remove-static-library
325 (lambda* (#:key outputs #:allow-other-keys)
326 (delete-file (string-append (assoc-ref outputs "out")
327 "/lib/libtommath.a"))
328 #t))
329 (replace 'check
330 (lambda* (#:key make-flags #:allow-other-keys)
331 (apply invoke "make" "test_standalone" make-flags)
332 (invoke "sh" "test")))
333 (add-after 'install 'install-static-library
334 (lambda* (#:key outputs #:allow-other-keys)
335 (invoke "make" "-f" "makefile.unix" "install"
336 (string-append "PREFIX=" (assoc-ref outputs "static"))
337 (string-append "CC=" (which "gcc"))))))
338 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
339 "CC=gcc")))
340 (native-inputs
341 `(("libtool" ,libtool)))
342 (home-page "https://www.libtom.net/LibTomMath/")
343 (synopsis "Portable number theoretic multiple-precision integer library")
344 (description "LibTomMath is a portable number theoretic multiple-precision
345integer library written entirely in C. It's designed to provide an API that is
346simple to work with that provides fairly efficient routines that build out of
347the box without configuration.")
348 (license unlicense)))