gnu: ffmpeg: Set LDFLAGS to -ldl.
[jackhill/guix/guix.git] / gnu / packages / maths.scm
index e4fd13a..c1f270a 100644 (file)
@@ -5,6 +5,8 @@
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2014 Mathieu Lirzin <mathieu.lirzin@openmailbox.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu packages maths)
+  #:use-module (ice-9 regex)
   #:use-module (gnu packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix svn-download)
   #:use-module (guix utils)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
@@ -175,7 +179,7 @@ LP/MIP solver is included in the package.")
 (define-public pspp
   (package
     (name "pspp")
-    (version "0.8.3")
+    (version "0.8.4")
     (source
      (origin
       (method url-fetch)
@@ -183,7 +187,7 @@ LP/MIP solver is included in the package.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "0vri2pzvmm38qaihfvwlry30f40lcnps4blg59ixic4q20ldxf5d"))))
+        "0b65q45x05ps95pph6glbg7ymdr638nfb0rk9x5x9qm5k073pk5z"))))
     (build-system gnu-build-system)
     (inputs
      `(("cairo" ,cairo)
@@ -211,6 +215,31 @@ can be imported from spreadsheets, text files and database sources and it can
 be output in text, PostScript, PDF or HTML.")
     (license license:gpl3+)))
 
+(define-public arpack-ng
+  (package
+    (name "arpack-ng")
+    (version "3.2.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/opencollab/arpack-ng/archive/"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1fwch6vipms1ispzg2djvbzv5wag36f1dmmr3xs3mbp6imfyhvff"))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/opencollab/arpack-ng")
+    (inputs
+     `(("lapack" ,lapack)
+       ("fortran" ,gfortran-4.8)))
+    (synopsis "Fortran subroutines for solving eigenvalue problems")
+    (description
+     "ARPACK-NG is a collection of Fortran77 subroutines designed to solve
+large scale eigenvalue problems.")
+    (license (license:bsd-style "file://COPYING"
+                                "See COPYING in the distribution."))))
+
 (define-public lapack
   (package
     (name "lapack")
@@ -266,9 +295,9 @@ problems in numerical linear algebra.")
     (home-page "http://www.gnuplot.info")
     (synopsis "Command-line driven graphing utility")
     (description "Gnuplot is a portable command-line driven graphing
-utility. It was originally created to allow scientists and students to
+utility.  It was originally created to allow scientists and students to
 visualize mathematical functions and data interactively, but has grown to
-support many non-interactive uses such as web scripting. It is also used as a
+support many non-interactive uses such as web scripting.  It is also used as a
 plotting engine by third-party applications like Octave.")
     ;;  X11 Style with the additional restriction that derived works may only be
     ;;  distributed as patches to the original.
@@ -310,7 +339,7 @@ extremely large and complex data collections.")
 (define-public octave
   (package
     (name "octave")
-    (version "3.8.0")
+    (version "3.8.2")
     (source
      (origin
       (method url-fetch)
@@ -318,7 +347,7 @@ extremely large and complex data collections.")
                          version ".tar.gz"))
       (sha256
        (base32
-       "0ks9pr154syw0vb3jn6xsnrkkrbvf9y7i7gaxa28rz6ngxbxvq9l"))))
+       "05slz8yx8k91fqlnfr1f0vni95iq9qmchz41c7nf4isn3b2fjn7j"))))
     (build-system gnu-build-system)
     (inputs
      `(("lapack" ,lapack)
@@ -386,6 +415,7 @@ files.")
        ("hdf5-include" ,hdf5 "include")
        ("lapack" ,lapack)
        ("mesa" ,mesa)
+       ("glu" ,glu)
        ("libx11" ,libx11)
        ("libxext" ,libxext)))
     (arguments
@@ -935,3 +965,232 @@ point numbers")
     ;; At least one file (src/maxima.asd) says "version 2."
     ;; GPLv2 only is therefore the smallest subset.
     (license license:gpl2)))
+
+(define-public muparser
+  (package
+    (name "muparser")
+    (version "2.2.5")
+    (source
+     (origin
+       (method svn-fetch)
+       (uri (svn-reference
+             (url "http://muparser.googlecode.com/svn/trunk/")
+             (revision 34)))
+       (sha256
+        (base32
+         "1d6bdbhx9zj3srwj3m7c9hvr18gnx1fx43h6d25my7q85gicpcwn"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags '("--enable-samples=no")
+       #:tests? #f)) ;no "check" target
+    (home-page "http://muparser.beltoforion.de/")
+    (synopsis "Fast parser library for mathematical expressions")
+    (description
+     "muParser is an extensible high performance math parser library.  It is
+based on transforming an expression into a bytecode and precalculating
+constant parts of it.")
+    (license license:expat)))
+
+(define-public openlibm
+  (package
+    (name "openlibm")
+    (version "0.4.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/JuliaLang/openlibm/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0cwqqqlblj3kzp9aq1wnpfs1fl0qd1wp1xzm5shb09w06i4rh9nn"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags
+       (list (string-append "prefix=" (assoc-ref %outputs "out")))
+       #:phases
+       ;; no configure script
+       (alist-delete 'configure %standard-phases)
+       #:tests? #f)) ;the tests are part of the default target
+    (home-page "http://openlibm.org/")
+    (synopsis "Portable C mathematical library (libm)")
+    (description
+     "OpenLibm is an effort to have a high quality, portable, standalone C
+mathematical library (libm).  It can be used standalone in applications and
+programming language implementations.  The project was born out of a need to
+have a good libm for the Julia programming langage that worked consistently
+across compilers and operating systems, and in 32-bit and 64-bit
+environments.")
+    ;; See LICENSE.md for details.
+    (license (list license:expat
+                   license:isc
+                   license:bsd-2
+                   license:public-domain
+                   license:lgpl2.1+))))
+
+(define-public openspecfun
+  (package
+    (name "openspecfun")
+    (version "0.4")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/JuliaLang/openspecfun/archive/v"
+                           version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32
+         "0nsa3jjmlhcqkw5ba5ypbn3n0c8b6lc22zzlxnmxkxi9shhdx65z"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f  ;no "check" target
+       #:make-flags
+       (list (string-append "prefix=" (assoc-ref %outputs "out")))
+       ;; no configure script
+       #:phases (alist-delete 'configure %standard-phases)))
+    (inputs
+     `(("fortran" ,gfortran-4.8)))
+    (home-page "https://github.com/JuliaLang/openspecfun")
+    (synopsis "Collection of special mathematical functions")
+    (description
+     "Openspecfun provides AMOS and Faddeeva.  AMOS (from Netlib) is a
+portable package for Bessel Functions of a Complex Argument and Nonnegative
+Order; it contains subroutines for computing Bessel functions and Airy
+functions.  Faddeeva allows computing the various error functions of arbitrary
+complex arguments (Faddeeva function, error function, complementary error
+function, scaled complementary error function, imaginary error function, and
+Dawson function); given these, one can also easily compute Voigt functions,
+Fresnel integrals, and similar related functions as well.")
+    ;; Faddeeva is released under the Expat license; AMOS is included as
+    ;; public domain software.
+    (license (list license:expat license:public-domain))))
+
+(define-public atlas
+  (package
+    (name "atlas")
+    (version "3.10.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/math-atlas/atlas"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "0bqh4bdnjdyww4mcpg6kn0x7338mfqbdgysn97dzrwwb26di7ars"))))
+    (build-system gnu-build-system)
+    (home-page "http://math-atlas.sourceforge.net/")
+    (inputs `(("gfortran" ,gfortran-4.8)
+              ("lapack-tar" ,(package-source lapack))))
+    (outputs '("out" "doc"))
+    ;; For the moment we drop support for MIPS at it fails to compile. See
+    ;; https://lists.gnu.org/archive/html/guix-devel/2014-11/msg00516.html
+    (supported-systems (delete "mips64el-linux" %supported-systems))
+    (arguments
+     `(#:parallel-build? #f
+       #:parallel-tests? #f
+
+       ;; ATLAS tunes itself for the machine it is built on, as explained at
+       ;; <http://lists.gnu.org/archive/html/guix-devel/2014-10/msg00305.html>.
+       ;; For this reason, we want users to build it locally instead of using
+       ;; substitutes.
+       #:substitutable? #f
+
+       #:modules ((srfi srfi-26)
+                  (srfi srfi-1)
+                  (guix build gnu-build-system)
+                  (guix build utils))
+       #:configure-flags 
+       `(;; Generate position independent code suitable for dynamic libraries
+         ;; and use WALL timer to get more accurate timing.
+         "-Fa" "alg" "-fPIC" "-D" "c" "-DWALL"
+         ;; Set word width.
+         "-b"
+         ,,(if (string-match "64" (%current-system))
+               "64"
+               "32")
+         ;; Disable parallel build as it gives errors: atlas_pthread.h is
+         ;; needed to compile C files before it is generated.
+         "-Ss" "pmake" "make -j 1"
+         ;; Probe is failing for MIPS.  We therefore define the system
+         ;; architecture explicitly by setting (-A) MACHINETYPE = 49
+         ;; 'MIPSR1xK' and (-V) ISA = 1 'none'.
+         ,,@(if (string-prefix? "mips" (%current-system))
+              (list "-A" "49" "-V" "1")
+              (list))
+         ;; Generate shared libraries.
+         "--shared"
+         ;; Build a full LAPACK library.
+         ,(string-append "--with-netlib-lapack-tarfile="
+                         (assoc-ref %build-inputs "lapack-tar")))
+       #:phases
+        (alist-cons-after
+         'install 'install-doc
+         (lambda* (#:key outputs inputs #:allow-other-keys)
+           (let ((doc (string-append (assoc-ref outputs "doc") 
+                                     "/share/doc/atlas")))
+             (mkdir-p doc)
+             (fold (lambda (file previous) 
+                     (and previous (zero? (system* "cp" file doc))))
+                   #t (find-files "../ATLAS/doc" ".*"))))
+         (alist-cons-after
+          'check 'check-pt
+          (lambda _ (zero? (system* "make" "ptcheck")))
+          ;; Fix files required to run configure.
+          (alist-cons-before
+           'configure 'fix-/bin/sh
+           (lambda _
+             ;; Use `sh', not `/bin/sh'.
+             (substitute* (find-files "." "Makefile|configure|SpewMakeInc\\.c")
+               (("/bin/sh")
+                "sh")))
+           ;; Fix /bin/sh in generated make files.
+           (alist-cons-after
+            'configure 'fix-/bin/sh-in-generated-files
+            (lambda _
+              (substitute* (find-files "." "^[Mm]ake\\.inc.*")
+                (("/bin/sh")
+                 "sh")))
+            ;; ATLAS configure program does not accepts the default flags
+            ;; passed by the 'gnu-build-system'.
+            (alist-replace
+             'configure
+             (lambda* (#:key native-inputs inputs outputs
+                             (configure-flags '())
+                             #:allow-other-keys #:rest args)
+               (let* ((prefix     (assoc-ref outputs "out"))
+                      (bash       (or (and=> (assoc-ref
+                                              (or native-inputs inputs) "bash")
+                                             (cut string-append <> "/bin/bash"))
+                                      "/bin/sh"))
+                      (flags      `(,(string-append "--prefix=" prefix)
+                                    ,@configure-flags))
+                      (abs-srcdir (getcwd))
+                      (srcdir     (string-append "../" (basename abs-srcdir))))
+                 (format #t "source directory: ~s (relative from build: ~s)~%"
+                         abs-srcdir srcdir)
+                 (mkdir "../build")
+                 (chdir "../build")
+                 (format #t "build directory: ~s~%" (getcwd))
+                 (format #t "configure flags: ~s~%" flags)
+                 (zero? (apply system* bash
+                               (string-append srcdir "/configure")
+                               flags))))
+             %standard-phases)))))))
+    (synopsis "Automatically Tuned Linear Algebra Software")
+    (description
+     "ATLAS is an automatically tuned linear algebra software library
+providing C and Fortran77 interfaces to a portably efficient BLAS
+implementation, as well as a few routines from LAPACK.
+
+Optimization occurs at build time.  For this reason, the library is built on
+the machine where it is installed, without resorting to pre-built substitutes.
+
+Before building the library, CPU throttling should be disabled.  This can be
+done in the BIOS, or, on GNU/Linux, with the following commands:
+
+cpufreq-selector -g performance -c 0
+...
+cpufreq-selector -g performance -c N-1
+
+where N is the number of cores of your CPU.  Failure to do so will result in a
+library with poor performance.")
+    (license license:bsd-3)))