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