;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (gnu packages)
#:use-module (gnu packages algebra)
#:use-module (gnu packages base)
+ #:use-module (gnu packages compression)
#:use-module (gnu packages elf)
#:use-module (gnu packages gcc)
#:use-module (gnu packages llvm)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages textutils)
+ #:use-module (gnu packages tls)
#:use-module (gnu packages version-control)
#:use-module (gnu packages wget)
#:use-module (ice-9 match))
(define libuv-julia
- (let ((commit "030481e9d659fd46702ab747caf2cbbe19d537ba")
- (revision "1"))
+ (let ((commit "52d72a52cc7ccd570929990f010ed16e2ec604c8")
+ (revision "5"))
(package (inherit libuv)
(name "libuv-julia")
- (version (string-append "0.11.26." revision "-" (string-take commit 8)))
+ (version (string-append "1.9.0-" revision "." (string-take commit 8)))
(source (origin
(method git-fetch)
(uri (git-reference
(file-name (string-append name "-" version "-checkout"))
(sha256
(base32
- "1ss63wfr2hghc8kb6ciry394gp6x58haz8vaj57l5mp80z04gd54"))))
+ "1daxh6ci6q7znxxajr3bm16dd53ragm0d681wf4kzg542qnjq3lh"))))
(build-system gnu-build-system)
(arguments
(substitute-keyword-arguments (package-arguments libuv)
(delete 'autogen)))))
(home-page "https://github.com/JuliaLang/libuv"))))
+(define libunwind-for-julia
+ (package
+ (inherit libunwind)
+ (version "1.1-julia2")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://s3.amazonaws.com/julialang/src/"
+ "libunwind-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0499x7sg2v18a6cry6l8y713cgmic0adnjph8i0xr1db9p7n8qyv"))))))
+
(define-public julia
(package
(name "julia")
- (version "0.4.2")
+ (version "0.6.0")
(source (origin
(method url-fetch)
(uri (string-append
"https://github.com/JuliaLang/julia/releases/download/v"
- version "/julia-" version "-full.tar.gz"))
+ version "/julia-" version ".tar.gz"))
(sha256
(base32
- "0sikirixvryf8z3d0skig22fpip64jk001qsha98iwsrcfiqpyds"))))
+ "0rd6lcc9sic10q1j3c6f9qr901i1c4554m93n2sz5b3mh37byqhw"))))
(build-system gnu-build-system)
(arguments
`(#:test-target "test"
(guix build gnu-build-system)
(guix build utils))
+ ;; Do not strip binaries to keep support for full backtraces.
+ ;; See https://github.com/JuliaLang/julia/issues/17831
+ #:strip-binaries? #f
;; The DSOs use $ORIGIN to refer to each other, but (guix build
;; gremlin) doesn't support it yet, so skip this phase.
#:phases
(modify-phases %standard-phases
(delete 'configure)
+ (add-after 'unpack 'prepare-deps
+ (lambda* (#:key inputs #:allow-other-keys)
+ (mkdir "deps/srccache")
+ (copy-file (assoc-ref inputs "dsfmt")
+ "deps/srccache/dsfmt-2.2.3.tar.gz")
+ (copy-file (assoc-ref inputs "objconv")
+ "deps/srccache/objconv.zip")
+ (copy-file (assoc-ref inputs "suitesparse")
+ "deps/srccache/SuiteSparse-4.4.5.tar.gz")
+ (copy-file (string-append (assoc-ref inputs "virtualenv")
+ "/bin/virtualenv")
+ "julia-env")
+ (copy-file (assoc-ref inputs "unicode-data")
+ "doc/UnicodeData.txt")
+ #t))
+ ;; FIXME: Building the documentation requires Julia packages that
+ ;; would be downloaded from the Internet. We should build them in a
+ ;; separate build phase.
+ (add-after 'unpack 'disable-documentation
+ (lambda _
+ (substitute* "Makefile"
+ (("(install: .*) \\$\\(BUILDROOT\\)/doc/_build/html/en/index.html" _ line)
+ (string-append line "\n"))
+ (("src ui doc deps")
+ "src ui deps"))
+ #t))
+ (add-before 'check 'set-home
+ ;; Some tests require a home directory to be set.
+ (lambda _ (setenv "HOME" "/tmp") #t))
(add-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.
+ ;; ./src/runtime_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 runtime_ccall.cpp to contain a static map.
(lambda* (#:key inputs #:allow-other-keys)
(use-modules (ice-9 match))
- (substitute* "src/ccall.cpp"
+ (substitute* "src/runtime_ccall.cpp"
(("jl_read_sonames.*;")
(string-join
(map (match-lambda
("gmp" "libgmp" "libgmp.so")
("openlibm" "libopenlibm" "libopenlibm.so")
("openspecfun" "libopenspecfun" "libopenspecfun.so")
- ("fftw" "libfftw3" "libfftw3.so")
- ("fftwf" "libfftw3f" "libfftw3f.so"))))))
+ ("fftw" "libfftw3" "libfftw3_threads.so")
+ ("fftwf" "libfftw3f" "libfftw3f_threads.so"))))))
+ (substitute* "base/fft/FFTW.jl"
+ (("const libfftw = Base.libfftw_name")
+ (string-append "const libfftw = \""
+ (assoc-ref inputs "fftw") "/lib/libfftw3_threads.so"
+ "\""))
+ (("const libfftwf = Base.libfftwf_name")
+ (string-append "const libfftwf = \""
+ (assoc-ref inputs "fftwf") "/lib/libfftw3f_threads.so"
+ "\"")))
+ (substitute* "base/math.jl"
+ (("const libm = Base.libm_name")
+ (string-append "const libm = \""
+ (assoc-ref inputs "openlibm")
+ "/lib/libopenlibm.so"
+ "\""))
+ (("const openspecfun = \"libopenspecfun\"")
+ (string-append "const openspecfun = \""
+ (assoc-ref inputs "openspecfun")
+ "/lib/libopenspecfun.so"
+ "\"")))
+ (substitute* "base/pcre.jl"
+ (("const PCRE_LIB = \"libpcre2-8\"")
+ (string-append "const PCRE_LIB = \""
+ (assoc-ref inputs "pcre2")
+ "/lib/libpcre2-8.so" "\"")))
#t))
(add-before 'build 'fix-include-and-link-paths
(lambda* (#:key inputs #:allow-other-keys)
(assoc-ref %build-inputs "libuv")
"/lib/libuv.so ")))
- (substitute* "deps/Makefile"
- (("/usr/include/double-conversion")
- (string-append (assoc-ref %build-inputs "double-conversion")
- "/include/double-conversion")))
(substitute* "base/Makefile"
(("\\$\\(build_includedir\\)/uv-errno.h")
(string-append (assoc-ref inputs "libuv")
(add-before 'check 'disable-broken-tests
(lambda _
(substitute* "test/choosetests.jl"
- ;; These tests time out. See
- ;; https://github.com/JuliaLang/julia/issues/14374 for ongoing
- ;; discussion.
- (("\"replcompletions\",") "")
- (("\"repl\",") ""))
- (substitute* "test/repl.jl"
- ;; This test fails because we cannot escape the build
- ;; directory.
- (("@test pwd\\(\\) == homedir\\(\\)") "#"))
+ ;; These tests fail, probably because some of the input
+ ;; binaries have been stripped and thus backtraces don't look
+ ;; as expected.
+ (("\"backtrace\",") "")
+ (("\"compile\",") "")
+ (("\"replutil\",") "")
+ (("\"cmdlineargs\",") "")
+ ;; FIXME: This test fails with the following error:
+ ;; Error in testset file:
+ ;; Test Failed
+ ;; Expression: download("ba\0d", "good")
+ ;; Expected: ArgumentError
+ ;; Thrown: Base.UVError
+ (("\"file\",") ""))
#t)))
#:make-flags
(list
(%current-system))
("x86_64-linux" "MARCH=x86-64")
("i686-linux" "MARCH=pentium4")
+ ("aarch64-linux" "MARCH=armv8-a")
;; Prevent errors when querying this package on unsupported
;; platforms, e.g. when running "guix package --search="
(_ "MARCH=UNSUPPORTED"))
"CONFIG_SHELL=bash" ;needed to build bundled libraries
"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
;; "/include")
"USE_GPL_LIBS=1" ;proudly
- "USE_SYSTEM_GRISU=1" ;for double-conversion
"USE_SYSTEM_UTF8PROC=1"
(string-append "UTF8PROC_INC="
(assoc-ref %build-inputs "utf8proc")
"/include")
"USE_SYSTEM_LLVM=1"
+ "USE_LLVM_SHLIB=0" ; FIXME: fails when set to 1
+
"USE_SYSTEM_LIBUNWIND=1"
"USE_SYSTEM_LIBUV=1"
(string-append "LIBUV="
"USE_SYSTEM_LIBGIT2=1"
"USE_SYSTEM_OPENSPECFUN=1")))
(inputs
- `(("llvm" ,llvm-3.5)
+ `(("llvm" ,llvm)
("arpack-ng" ,arpack-ng)
("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
("lapack" ,lapack)
("openblas" ,openblas) ;Julia does not build with Atlas
- ("libunwind" ,libunwind)
+ ("libunwind" ,libunwind-for-julia)
("openlibm" ,openlibm)
("openspecfun" ,openspecfun)
- ("double-conversion" ,double-conversion)
("libgit2" ,libgit2)
("fftw" ,fftw)
("fftwf" ,fftwf)
("mpfr" ,mpfr)
("wget" ,wget)
("which" ,which)
- ("gmp" ,gmp)))
+ ("zlib" ,zlib)
+ ("gmp" ,gmp)
+ ("virtualenv" ,python2-virtualenv)
+ ;; FIXME: The following inputs are downloaded from upstream to allow us
+ ;; to use the lightweight Julia release tarball. Ideally, these inputs
+ ;; would eventually be replaced with proper Guix packages.
+
+ ;; TODO: run "make -f contrib/repackage_system_suitesparse4.make" to copy static lib
+ ("suitesparse"
+ ,(origin
+ (method url-fetch)
+ (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
+ (sha256
+ (base32
+ "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+ ("objconv"
+ ,(origin
+ (method url-fetch)
+ (uri "http://www.agner.org/optimize/objconv.zip")
+ (sha256
+ (base32
+ "1fi7qa2sd9vb35dvkgripjf0fayzg2qmff215f8agfqfiwd1g8qs"))))
+ ("dsfmt"
+ ,(origin
+ (method url-fetch)
+ (uri (string-append
+ "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/"
+ "SFMT/dSFMT-src-2.2.3.tar.gz"))
+ (sha256
+ (base32
+ "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))))))
(native-inputs
- `(("perl" ,perl)
+ `(("openssl" ,openssl)
+ ("perl" ,perl)
("patchelf" ,patchelf)
("pkg-config" ,pkg-config)
- ("python" ,python-2)))
+ ("python" ,python-2)
+ ("unicode-data"
+ ,(origin
+ (method url-fetch)
+ (uri "http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt")
+ (sha256
+ (base32
+ "13zfannnr6sa6s27ggvcvzmh133ndi38pfyxsssvjmw2s8ac9pv8"))))))
;; Julia is not officially released for ARM and MIPS.
;; See https://github.com/JuliaLang/julia/issues/10639
- (supported-systems '("i686-linux" "x86_64-linux"))
+ (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
(home-page "http://julialang.org/")
(synopsis "High-performance dynamic language for technical computing")
(description