gnu: Add Julia.
* gnu/packages/julia.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add it.
This commit is contained in:
		
							parent
							
								
									61a529b421
								
							
						
					
					
						commit
						aa5fac334f
					
				
					 2 changed files with 173 additions and 0 deletions
				
			
		|  | @ -156,6 +156,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   gnu/packages/iso-codes.scm			\ | ||||
|   gnu/packages/java.scm				\ | ||||
|   gnu/packages/jrnl.scm				\ | ||||
|   gnu/packages/julia.scm			\ | ||||
|   gnu/packages/kde.scm				\ | ||||
|   gnu/packages/key-mon.scm			\ | ||||
|   gnu/packages/language.scm			\ | ||||
|  |  | |||
							
								
								
									
										172
									
								
								gnu/packages/julia.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								gnu/packages/julia.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,172 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net> | ||||
| ;;; | ||||
| ;;; 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 julia) | ||||
|   #:use-module ((guix licenses) #:prefix license:) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (gnu packages algebra) | ||||
|   #:use-module (gnu packages base) | ||||
|   #:use-module (gnu packages elf) | ||||
|   #:use-module (gnu packages gcc) | ||||
|   #:use-module (gnu packages llvm) | ||||
|   #:use-module (gnu packages libunwind) | ||||
|   #:use-module (gnu packages maths) | ||||
|   #:use-module (gnu packages multiprecision) ; mpfr | ||||
|   #:use-module (gnu packages pcre) | ||||
|   #:use-module (gnu packages perl) | ||||
|   #:use-module (gnu packages pkg-config) | ||||
|   #:use-module (gnu packages python) | ||||
|   #:use-module (gnu packages textutils) | ||||
|   #:use-module (gnu packages version-control)) | ||||
| 
 | ||||
| (define-public julia | ||||
|   (package | ||||
|     (name "julia") | ||||
|     (version "0.3.6") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|                     "https://github.com/JuliaLang/julia/releases/download/v" | ||||
|                     version "/julia-" version "_0c24dca65c.tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1hnbc2blzr9bc27m3vsr127fhg0h5imgqlrx00jakf0my0ccw8gr")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:test-target "test" | ||||
|        #:modules ((ice-9 match) | ||||
|                   (guix build gnu-build-system) | ||||
|                   (guix build utils)) | ||||
|        #:phases | ||||
|        (alist-cons-after | ||||
|         'unpack 'hardcode-soname-map | ||||
|         ;; ./src/ccall.cpp creates a map from library names to paths using the | ||||
|         ;; output of "/sbin/ldconfig -p".  Since ldconfig is not used in Guix, | ||||
|         ;; we patch ccall.cpp to contain a static map. | ||||
|         (lambda* (#:key inputs #:allow-other-keys) | ||||
|           (use-modules (ice-9 match)) | ||||
|           (substitute* "src/ccall.cpp" | ||||
|             (("jl_read_sonames.*;") | ||||
|              (string-join | ||||
|               (map (match-lambda | ||||
|                     ((input libname soname) | ||||
|                      (string-append | ||||
|                       "sonameMap[\"" libname "\"] = " | ||||
|                       "\"" (assoc-ref inputs input) "/lib/" soname "\";"))) | ||||
|                    '(("libc"        "libc"           "libc.so.6") | ||||
|                      ("pcre"        "libpcre"        "libpcre.so") | ||||
|                      ("mpfr"        "libmpfr"        "libmpfr.so") | ||||
|                      ("openblas"    "libblas"        "libopenblas.so") | ||||
|                      ("arpack-ng"   "libarpack"      "libarpack.so") | ||||
|                      ("lapack"      "liblapack"      "liblapack.so") | ||||
|                      ("gmp"         "libgmp"         "libgmp.so") | ||||
|                      ("openlibm"    "libopenlibm"    "libopenlibm.so") | ||||
|                      ("openspecfun" "libopenspecfun" "libopenspecfun.so") | ||||
|                      ("fftw"        "libfftw3"       "libfftw3.so") | ||||
|                      ("fftwf"       "libfftw3f"      "libfftw3f.so"))))))) | ||||
|         (alist-cons-before | ||||
|          'build 'replace-default-shell | ||||
|          (lambda _ | ||||
|            (substitute* "base/client.jl" | ||||
|              (("/bin/sh") (which "sh")))) | ||||
|          (alist-cons-before | ||||
|           'build 'patch-include-path | ||||
|           (lambda _ | ||||
|             (substitute* "deps/Makefile" | ||||
|               (("/usr/include/double-conversion") | ||||
|                (string-append (assoc-ref %build-inputs "double-conversion") | ||||
|                               "/include/double-conversion")))) | ||||
|           (alist-cons-before | ||||
|            'check 'disable-broken-test | ||||
|            ;; One test fails because it produces slightly different output. | ||||
|            (lambda _ | ||||
|              (substitute* "test/repl.jl" | ||||
|                (("@test output") "# @test output"))) | ||||
|            ;; no configure script | ||||
|            (alist-delete 'configure %standard-phases))))) | ||||
|        #:make-flags | ||||
|        (list | ||||
|         (string-append "prefix=" (assoc-ref %outputs "out")) | ||||
|         "CONFIG_SHELL=bash"     ;needed to build bundled libraries | ||||
|         "USE_SYSTEM_LIBUV=0"    ;Julia expects a modified libuv | ||||
|         "USE_SYSTEM_DSFMT=0"    ;not packaged for Guix and upstream has no | ||||
|                                 ;build system for a shared library. | ||||
|         "USE_SYSTEM_RMATH=0"    ;Julia uses a bundled version of R's math | ||||
|                                 ;library, patched to use the DSFMT RNG. | ||||
| 
 | ||||
|         "USE_SYSTEM_LAPACK=1" | ||||
|         "USE_SYSTEM_BLAS=1" | ||||
|         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1 | ||||
| 
 | ||||
|         "USE_SYSTEM_FFTW=1" | ||||
|         "LIBFFTWNAME=libfftw3" | ||||
|         "LIBFFTWFNAME=libfftw3f" | ||||
| 
 | ||||
|         ;; TODO: Suitesparse does not install shared libraries, so we cannot | ||||
|         ;; use the suitesparse package. | ||||
|         ;; "USE_SYSTEM_SUITESPARSE=1" | ||||
|         ;; (string-append "SUITESPARSE_INC=-I " | ||||
|         ;;                (assoc-ref %build-inputs "suitesparse") | ||||
|         ;;                "/include") | ||||
| 
 | ||||
|         "USE_SYSTEM_GRISU=1"    ;for double-conversion | ||||
|         "USE_SYSTEM_UTF8PROC=1" | ||||
|         "USE_SYSTEM_LLVM=1" | ||||
|         "USE_SYSTEM_LIBUNWIND=1" | ||||
|         "USE_SYSTEM_PCRE=1" | ||||
|         "USE_SYSTEM_OPENLIBM=1" | ||||
|         "USE_SYSTEM_GMP=1" | ||||
|         "USE_SYSTEM_MPFR=1" | ||||
|         "USE_SYSTEM_ARPACK=1" | ||||
|         "USE_SYSTEM_LIBGIT2=1" | ||||
|         "USE_SYSTEM_OPENSPECFUN=1"))) | ||||
|     (inputs | ||||
|      `(("llvm" ,llvm-3.5) | ||||
|        ("arpack-ng" ,arpack-ng) | ||||
|        ("lapack" ,lapack) | ||||
|        ("openblas" ,openblas) ;Julia does not build with Atlas | ||||
|        ("libunwind" ,libunwind) | ||||
|        ("openlibm" ,openlibm) | ||||
|        ("openspecfun" ,openspecfun) | ||||
|        ("double-conversion" ,double-conversion) | ||||
|        ("fftw" ,fftw) | ||||
|        ("fftwf" ,fftwf) | ||||
|        ("fortran" ,gfortran-4.8) | ||||
|        ("pcre" ,pcre) | ||||
|        ("utf8proc" ,utf8proc) | ||||
|        ("git" ,git) | ||||
|        ("mpfr" ,mpfr) | ||||
|        ("gmp" ,gmp))) | ||||
|     (native-inputs | ||||
|      `(("perl" ,perl) | ||||
|        ("patchelf" ,patchelf) | ||||
|        ("pkg-config" ,pkg-config) | ||||
|        ("python" ,python-2) | ||||
|        ("which" ,which))) | ||||
|     (home-page "http://julialang.org/") | ||||
|     (synopsis "High-performance dynamic language for technical computing") | ||||
|     (description | ||||
|      "Julia is a high-level, high-performance dynamic programming language for | ||||
| technical computing, with syntax that is familiar to users of other technical | ||||
| computing environments.  It provides a sophisticated compiler, distributed | ||||
| parallel execution, numerical accuracy, and an extensive mathematical function | ||||
| library.") | ||||
|     (license license:expat))) | ||||
		Reference in a new issue