Merge branch 'master' into core-updates
[jackhill/guix/guix.git] / gnu / packages / multiprecision.scm
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 Andreas Enge <andreas@enge.fr>
5 ;;; Copyright © 2016 Nicolas Goaziou <mail@nicolasgoaziou.fr>
6 ;;;
7 ;;; This file is part of GNU Guix.
8 ;;;
9 ;;; GNU Guix is free software; you can redistribute it and/or modify it
10 ;;; under the terms of the GNU General Public License as published by
11 ;;; the Free Software Foundation; either version 3 of the License, or (at
12 ;;; your option) any later version.
13 ;;;
14 ;;; GNU Guix is distributed in the hope that it will be useful, but
15 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;;; GNU General Public License for more details.
18 ;;;
19 ;;; You should have received a copy of the GNU General Public License
20 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
21
22 (define-module (gnu packages multiprecision)
23 #:use-module (guix licenses)
24 #:use-module (gnu packages)
25 #:use-module (gnu packages m4)
26 #:use-module (guix packages)
27 #:use-module (guix download)
28 #:use-module (guix utils)
29 #:use-module (guix build-system gnu))
30
31 (define-public gmp
32 (package
33 (name "gmp")
34 (version "6.1.1")
35 (source (origin
36 (method url-fetch)
37 (uri
38 (string-append "mirror://gnu/gmp/gmp-"
39 version ".tar.xz"))
40 (sha256
41 (base32
42 "0cg84n482gcvl0s4xq4wgwsk4r0x0m8dnzpizwqdd2j8vw2rqvnk"))
43 (patches (search-patches "gmp-faulty-test.patch"))))
44 (build-system gnu-build-system)
45 (native-inputs `(("m4" ,m4)))
46 (outputs '("out" "debug"))
47 (arguments `(#:parallel-tests? #f ; mpz/reuse fails otherwise
48 #:configure-flags
49 '(;; Build a "fat binary", with routines for several
50 ;; sub-architectures.
51 "--enable-fat"
52 "--enable-cxx")))
53 (synopsis "Multiple-precision arithmetic library")
54 (description
55 "GMP is a library for arbitrary precision arithmetic, operating on
56 signed integers, rational numbers and floating point numbers. The precision
57 is only limited by the available memory. The library is highly optimized,
58 with a design focus on execution speed. It is aimed at use in, for example,
59 cryptography and computational algebra.")
60 (license lgpl3+)
61 (home-page "http://gmplib.org/")))
62
63 (define-public gmp-6.0
64 ;; We keep this one around to bootstrap GCC, to work around a compilation
65 ;; issue on ARM. See
66 ;; <https://gmplib.org/list-archives/gmp-bugs/2015-December/003848.html>.
67 (package
68 (inherit gmp)
69 (version "6.0.0a")
70 (source (origin
71 (method url-fetch)
72 (uri (string-append "mirror://gnu/gmp/gmp-"
73 version ".tar.xz"))
74 (sha256
75 (base32
76 "0r5pp27cy7ch3dg5v0rsny8bib1zfvrza6027g2mp5f6v8pd6mli"))
77 (patches (search-patches "gmp-arm-asm-nothumb.patch"
78 "gmp-faulty-test.patch"))))))
79
80 (define-public mpfr
81 (package
82 (name "mpfr")
83 (version "3.1.4")
84 (source (origin
85 (method url-fetch)
86 (uri (string-append "mirror://gnu/mpfr/mpfr-" version
87 ".tar.xz"))
88 (sha256 (base32
89 "1x8pcnpn1vxfzfsr0js07rwhwyq27fmdzcfjpzi5773ldnqi653n"))))
90 (build-system gnu-build-system)
91 (outputs '("out" "debug"))
92 (propagated-inputs `(("gmp" ,gmp))) ; <mpfr.h> refers to <gmp.h>
93 (synopsis "C library for arbitrary precision floating-point arithmetic")
94 (description
95 "GNU MPFR is a C library for performing multiple-precision,
96 floating-point computations with correct rounding.")
97 (license lgpl3+)
98 (home-page "http://www.mpfr.org/")))
99
100 (define-public mpc
101 (package
102 (name "mpc")
103 (version "1.0.3")
104 (source (origin
105 (method url-fetch)
106 (uri (string-append
107 "mirror://gnu/mpc/mpc-" version ".tar.gz"))
108 (sha256
109 (base32
110 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))
111 (build-system gnu-build-system)
112 (outputs '("out" "debug"))
113 (propagated-inputs `(("gmp" ,gmp) ; <mpc.h> refers to both
114 ("mpfr" ,mpfr)))
115 (synopsis "C library for arbitrary precision complex arithmetic")
116 (description
117 "GNU MPC is a C library for performing arithmetic on complex numbers.
118 It supports arbitrarily high precision and it correctly rounds the results.")
119 (license lgpl3+)
120 (home-page "http://mpc.multiprecision.org/")))
121
122 (define-public mpfi
123 (package
124 (name "mpfi")
125 (version "1.5.1")
126 (source (origin
127 (method url-fetch)
128 (uri (string-append "https://gforge.inria.fr/frs/download.php/"
129 "file/30130/mpfi-" version ".tar.gz"))
130 (sha256
131 (base32
132 "1g2q6i7dqx40p4gw11da6jgfcbzmm26wxc69fwv8zpcdyg32a9za"))))
133 (build-system gnu-build-system)
134 (propagated-inputs `(("gmp" ,gmp) ; <mpfi.h> refers to both
135 ("mpfr" ,mpfr)))
136 (synopsis "C library for arbitrary precision interval arithmetic")
137 (description "MPFI is intended to be a portable library written in C for
138 arbitrary precision interval arithmetic with intervals represented using MPFR
139 reliable floating-point numbers. It is based on the GNU MP library and on the
140 MPFR library. The purpose of an arbitrary precision interval arithmetic is on
141 the one hand to get guaranteed results, thanks to interval computation, and on
142 the other hand to obtain accurate results, thanks to multiple precision
143 arithmetic.")
144 (license lgpl2.1+)
145 (home-page "https://perso.ens-lyon.fr/nathalie.revol/software.html")))