all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
  2019-10-10 15:49   ` [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat Nicolò Balzarotti
  2019-10-10 15:49   ` [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables Nicolò Balzarotti
@ 2019-10-10 15:49   ` Nicolò Balzarotti
  2019-12-15 21:45     ` Ludovic Courtès
  2019-12-12  8:43   ` [bug#38546] [PATCH 01/11] gnu: julia: Update to 1.3.1 nixo
                     ` (17 subsequent siblings)
  20 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2019-10-10 15:49 UTC (permalink / raw)
  To: Guix Patches

---
 guix/build-system/julia.scm       |  4 +++-
 guix/build/julia-build-system.scm | 28 +++++++++++++++++++---------
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/guix/build-system/julia.scm b/guix/build-system/julia.scm
index 488fe9bb1d..0c07484f12 100644
--- a/guix/build-system/julia.scm
+++ b/guix/build-system/julia.scm
@@ -26,6 +26,7 @@
   #:use-module (guix build-system gnu)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-26)
+  #:use-module (gnu packages check) ;; libfaketime
   #:export (%julia-build-system-modules
             julia-build
             julia-build-system))
@@ -68,6 +69,7 @@
                         ;; Keep the standard inputs of 'gnu-build-system'.
                         ,@(standard-packages)))
          (build-inputs `(("julia" ,julia)
+                         ("libfaketime" ,libfaketime)
                          ,@native-inputs))
          (outputs outputs)
          (build julia-build)
@@ -75,7 +77,7 @@
 
 (define* (julia-build store name inputs
                       #:key source
-                      (tests? #f)
+                      (tests? #t)
                       (phases '(@ (guix build julia-build-system)
                                   %standard-phases))
                       (outputs '("out"))
diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index ff6fcf5fe3..bd4c64fa11 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -32,7 +32,13 @@
 ;; Code:
 
 (define (invoke-julia code)
-  (invoke "julia" "-e" code))
+  ;; Julia stores the result of the time() call
+  ;; inside the precompiled file. When trying to load it, its precompilation
+  ;; it fails at comparing the file mtime with the precompilation time,
+  ;; always triggering a recompile. This fixes the stored value.
+  ;; Also, libc.jl rand() uses time() as its seed. This might introduce indeterminism while building
+  ;; Default guix mtime is 1, so I'm setting the same here (if they differ, precompilation is invalid)
+  (invoke "faketime" "-f" "1970-01-01 00:00:01" "julia" "-e" code))
 
 ;; subpath where we store the package content
 (define %package-path "/share/julia/packages/")
@@ -78,13 +84,17 @@
     (invoke-julia (string-append "using " package)))
   #t)
 
-(define* (check #:key source inputs outputs #:allow-other-keys)
-  (let* ((out (assoc-ref outputs "out"))
-         (package (strip-store-file-name source))
-         (builddir (string-append out "/share/julia/")))
-    (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    (invoke-julia (string-append "using Pkg;Pkg.test(\"" package "\")")))
+(define* (check #:key tests? source inputs outputs #:allow-other-keys)
+  (when tests?
+      (let* ((out (assoc-ref outputs "out"))
+             (package (strip-store-file-name source))
+             (builddir (string-append out "/share/julia/")))
+        (setenv "JULIA_DEPOT_PATH" builddir)
+        (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+        (display builddir)
+        (invoke "julia" (string-append builddir
+                                       "packages/"
+                                       package "/test/runtests.jl"))))
   #t)
 
 (define (julia-create-package-toml outputs source
@@ -119,7 +129,7 @@ version = \"" version "\"
     (delete 'check) ; tests must be run after installation
     (replace 'install install)
     (add-after 'install 'precompile precompile)
-    ;; (add-after 'install 'check check)
+    (add-after 'install 'check check)
     ;; TODO: In the future we could add a "system-image-generation" phase
     ;; where we use PackageCompiler.jl to speed up package loading times
     (delete 'configure)
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
@ 2019-10-10 15:49   ` Nicolò Balzarotti
  2019-12-15 21:46     ` Ludovic Courtès
  2019-10-10 15:49   ` [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables Nicolò Balzarotti
                     ` (19 subsequent siblings)
  20 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2019-10-10 15:49 UTC (permalink / raw)
  To: Guix Patches

* gnu/packages/julia-xyz.scm: New file.
* gnu/packages/julia-xyz.scm (julia-compat): New variable.
---
 gnu/packages/julia-xyz.scm | 62 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)
 create mode 100644 gnu/packages/julia-xyz.scm

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
new file mode 100644
index 0000000000..85d4d696d9
--- /dev/null
+++ b/gnu/packages/julia-xyz.scm
@@ -0,0 +1,62 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;;
+;;; 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-xyz)
+  #:use-module (guix build-system julia)
+  #:use-module (guix git-download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (gnu packages algebra)
+  #:use-module (gnu packages base)      ; binutils (packagecompiler)
+  #:use-module (gnu packages commencement)
+  #:use-module (gnu packages compression)
+  #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages fonts)
+  #:use-module (gnu packages graphics)
+  #:use-module (gnu packages glib)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages image)
+  #:use-module (gnu packages imagemagick)
+  #:use-module (gnu packages maths)
+  #:use-module (gnu packages statistics)
+  #:use-module (gnu packages video)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml)
+  #:use-module (gnu packages tls))
+
+(define-public julia-compat
+  (package
+    (name "julia-compat")
+    (version "3.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/Compat.jl")
+             (commit (string-append "v" version))))
+       (file-name "Compat")
+       (sha256
+        (base32 "0n4gqk0b5fcf0d12gizjs7hsgakh7w7xgx2srbvzc5pkm5z469l4"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/Compat.jl")
+    (synopsis "Compatibility across Julia versions")
+    (description "The Compat package is designed to ease interoperability
+between older and newer versions of the Julia language.  The Compat package
+provides a macro that lets you use the latest syntax in a backwards-compatible
+way.")
+    (license license:expat)))
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
  2019-10-10 15:49   ` [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat Nicolò Balzarotti
@ 2019-10-10 15:49   ` Nicolò Balzarotti
  2019-12-15 21:43     ` Ludovic Courtès
  2019-10-10 15:49   ` [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests Nicolò Balzarotti
                     ` (18 subsequent siblings)
  20 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2019-10-10 15:49 UTC (permalink / raw)
  To: Guix Patches

 gnu/packages/julia.scm | 146 +++++++++++++++++++++--------------------
 1 file changed, 75 insertions(+), 71 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..2516e7fa82 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -158,7 +158,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.1.1") ;; Update also JULIA_LOAD_PATH with it
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -229,77 +229,77 @@
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t))
          (add-after 'unpack 'hardcode-soname-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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
+           ;; ./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/runtime_ccall.cpp"
+               ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
+               ;; error messages about missing '/sbin/ldconfig' on Guix System.
+               (("popen\\(.*ldconfig.*\\);")
+                "NULL;\n")
 
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+               ;; Populate 'sonameMap'.
+               (("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")
+                        ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
+                        ("mpfr"        "libmpfr"        "libmpfr.so")
+                        ("openblas"    "libblas"        "libopenblas.so")
+                        ("arpack-ng"   "libarpack"      "libarpack.so")
+                        ("lapack"      "liblapack"      "liblapack.so")
+                        ("libgit2"     "libgit2"        "libgit2.so")
+                        ("gmp"         "libgmp"         "libgmp.so")
+                        ("openspecfun" "libopenspecfun" "libopenspecfun.so")
+                        ("fftw"        "libfftw3"       "libfftw3_threads.so")
+                        ("fftwf"       "libfftw3f"      "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"
+                               "\"")))
+             #t))
          (add-before 'build 'fix-include-and-link-paths
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; LIBUTF8PROC is a linker flag, not a build target.  It is
-            ;; included in the LIBFILES_* variable which is used as a
-            ;; collection of build targets and a list of libraries to link
-            ;; against.
-            (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
+             ;; included in the LIBFILES_* variable which is used as a
+             ;; collection of build targets and a list of libraries to link
+             ;; against.
+             (substitute* "src/flisp/Makefile"
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
 
-            ;; The REPL must be linked with libuv.
-            (substitute* "ui/Makefile"
-              (("JLDFLAGS \\+= ")
-               (string-append "JLDFLAGS += "
-                              (assoc-ref %build-inputs "libuv")
-                              "/lib/libuv.so ")))
+             ;; The REPL must be linked with libuv.
+             (substitute* "ui/Makefile"
+               (("JLDFLAGS \\+= ")
+                (string-append "JLDFLAGS += "
+                               (assoc-ref %build-inputs "libuv")
+                               "/lib/libuv.so ")))
 
-            (substitute* "base/Makefile"
-              (("\\$\\(build_includedir\\)/uv/errno.h")
-               (string-append (assoc-ref inputs "libuv")
-                              "/include/uv/errno.h")))
-            #t))
+             (substitute* "base/Makefile"
+               (("\\$\\(build_includedir\\)/uv/errno.h")
+                (string-append (assoc-ref inputs "libuv")
+                               "/include/uv/errno.h")))
+             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
+           (lambda _
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
+             #t))
          (add-after 'unpack 'hardcode-paths
            (lambda _
              (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
@@ -345,9 +345,9 @@
            ;; 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.
+        "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_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
@@ -485,7 +485,11 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/"
+                         "share/julia/stdlib/v1.1/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
-- 
2.24.0

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz
@ 2019-12-09 13:36 ` nixo
  2019-10-10 15:49   ` [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat Nicolò Balzarotti
                     ` (20 more replies)
  0 siblings, 21 replies; 54+ messages in thread
From: nixo @ 2019-12-09 13:36 UTC (permalink / raw)
  To: 38546


Hello Guix!

Changes:

This set of patches improve the state of julia-build-system.

1. set path JULIA_LOAD_PATH to enable installing packages, and
  JULIA_DEPOT_PATH to allow guix-precompiled cache to be recognized by julia. To
  do this, a small "hack" with libfaketime was required (julia decides if the
  cache is valid by comparing source ".jl" mtime with cache ".ji" file, in which
  julia stores a timestamp. We need to force this timestamp to be equal to the
  mtime of guix-store files).
2. Enable package tests
3. Add a first package (julia-compat) definition. If this is fine, I'll start
   pushing many many more (I have them ready, but I need to update many of them)



 Thanks! :)

One note: with this PATH changes, julia will not be able to find packages
installed by Julia Pkg3.jl anymore. This is expected (it should happen for R,
python, emacs... too) but since we still need to merge the packages, this
patch renders julia pretty unusable. The workaround is for users to add to
JULIA_LOAD_PATH and JULIA_LOAD_PATH local user-writable folders, activate a
profile, and then install packages manually:

#+begin_src bash
   JULIA_LOAD_PATH=/tmp/julia:$JULIA_LOAD_PATH JULIA_DEPOT_PATH=/tmp/julia:$JULIA_DEPOT_PATH julia
#+end_src

nixo (3):
 gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables.
 gnu: julia-build-system: Enable tests.
 gnu: julia-xyz: Add julia-compat.

#+begin_src julia
   using Pkg
   Pkg.activate("/tmp/julia")
   Pkg.add("PACKAGE_NAME")
#+end_src

-- 
2.24.0

gnu/packages/julia-xyz.scm        |  62 +++++++++++++
gnu/packages/julia.scm            | 146 +++++++++++++++---------------
guix/build-system/julia.scm       |   4 +-
guix/build/julia-build-system.scm |  28 ++++--
4 files changed, 159 insertions(+), 81 deletions(-)
create mode 100644 gnu/packages/julia-xyz.scm

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 01/11] gnu: julia: Update to 1.3.1.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (2 preceding siblings ...)
  2019-10-10 15:49   ` [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests Nicolò Balzarotti
@ 2019-12-12  8:43   ` nixo
  2019-12-15 21:40   ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz Ludovic Courtès
                     ` (16 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2019-12-12  8:43 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia.scm (julia): Update to 1.3.1.
* gnu/packages/julia.scm (libuv-julia): Update to 2.0.0.
---
 gnu/packages/julia.scm | 278 +++++++++++++++++------------------------
 1 file changed, 113 insertions(+), 165 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..e4db39afbd 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin (method url-fetch)
+	    (uri (julia-patch-url version name))
+	    (sha256 (base32 sha))
+	    (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; julia requires a patched version
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+	        (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/JuliaLang/libuv")))
 
 (define llvm-julia
   (package
@@ -99,39 +124,39 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
+	        (julia-patch "llvm-6.0-D44650"
 			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
+	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
 			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
+	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
 			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
+	        (julia-patch "llvm-6.0.0_D27296-libssp"
 			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
+	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
 			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
+	        (julia-patch "llvm-D34078-vectorize-fdiv"
 			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
+	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
 			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
+	        (julia-patch "llvm-D44892-Perf-integration"
 			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
+	        (julia-patch "llvm-D46460"
 			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
+	        (julia-patch "llvm-D49832-SCEVPred"
 			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
+	        (julia-patch "llvm-D50010-VNCoercion-ni"
 			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
+	        (julia-patch "llvm-D50167-scev-umin"
 			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
+	        (julia-patch "llvm-OProfile-line-num"
 			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
+	        (julia-patch "llvm-PPC-addrspaces"
 			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
+	        (julia-patch "llvm-rL323946-LSRTy"
 			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
+	        (julia-patch "llvm-rL326967-aligned-load"
 			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
+	        (julia-patch "llvm-rL327898"
 			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
@@ -158,7 +183,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +191,7 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +213,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +252,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +265,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,38 +283,28 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
@@ -345,26 +322,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +357,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +378,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +393,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +423,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (3 preceding siblings ...)
  2019-12-12  8:43   ` [bug#38546] [PATCH 01/11] gnu: julia: Update to 1.3.1 nixo
@ 2019-12-15 21:40   ` Ludovic Courtès
  2020-01-10  9:25   ` [bug#38546] [PATCH 03/11] gnu: julia: Adjust indentation nixo
                     ` (15 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: Ludovic Courtès @ 2019-12-15 21:40 UTC (permalink / raw)
  To: nixo; +Cc: 38546

Hi!

nixo <anothersms@gmail.com> skribis:

> This set of patches improve the state of julia-build-system.
>
> 1. set path JULIA_LOAD_PATH to enable installing packages, and
>   JULIA_DEPOT_PATH to allow guix-precompiled cache to be recognized by julia. To

These two environment variables are supported upstream, right?

>   do this, a small "hack" with libfaketime was required (julia decides if the
>   cache is valid by comparing source ".jl" mtime with cache ".ji" file, in which
>   julia stores a timestamp. We need to force this timestamp to be equal to the
>   mtime of guix-store files).

OK.  This hack shouldn’t break “normal” Julia uses (outside of the
store), right?

Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables.
  2019-10-10 15:49   ` [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables Nicolò Balzarotti
@ 2019-12-15 21:43     ` Ludovic Courtès
  0 siblings, 0 replies; 54+ messages in thread
From: Ludovic Courtès @ 2019-12-15 21:43 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Guix Patches

Nicolò Balzarotti <anothersms@gmail.com> skribis:

>  gnu/packages/julia.scm | 146 +++++++++++++++++++++--------------------
>  1 file changed, 75 insertions(+), 71 deletions(-)

Please make sure to add a commit log listing all the entities changed.

Apparently there was some reindentation that makes this patch looks big
and makes the actual changes harder to spot.  Could you resubmit it
without the reindentation?

>      (native-search-paths
>       (list (search-path-specification
>              (variable "JULIA_LOAD_PATH")
> -            (files (list "share/julia/packages/")))))
> +            (files (list "share/julia/packages/"
> +                         "share/julia/stdlib/v1.1/")))

Why is this extra entry needed?  Doesn’t Julia find its own standard
library by default, even if JULIA_LOAD_PATH is unset?

> +           (search-path-specification
> +            (variable "JULIA_DEPOT_PATH")
> +            (files (list "share/julia/")))))

What’s JULIA_DEPOT_PATH supposed to point to again?  ‘share/julia’ seems
to be very much a catch-all thing.  :-)

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests.
  2019-10-10 15:49   ` [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests Nicolò Balzarotti
@ 2019-12-15 21:45     ` Ludovic Courtès
  0 siblings, 0 replies; 54+ messages in thread
From: Ludovic Courtès @ 2019-12-15 21:45 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Guix Patches

Nicolò Balzarotti <anothersms@gmail.com> skribis:

> ---
>  guix/build-system/julia.scm       |  4 +++-
>  guix/build/julia-build-system.scm | 28 +++++++++++++++++++---------
>  2 files changed, 22 insertions(+), 10 deletions(-)

With a commit log, please.  :-)

> --- a/guix/build/julia-build-system.scm
> +++ b/guix/build/julia-build-system.scm
> @@ -32,7 +32,13 @@
>  ;; Code:
>  
>  (define (invoke-julia code)
> -  (invoke "julia" "-e" code))
> +  ;; Julia stores the result of the time() call
> +  ;; inside the precompiled file. When trying to load it, its precompilation
> +  ;; it fails at comparing the file mtime with the precompilation time,
> +  ;; always triggering a recompile. This fixes the stored value.
> +  ;; Also, libc.jl rand() uses time() as its seed. This might introduce indeterminism while building
> +  ;; Default guix mtime is 1, so I'm setting the same here (if they differ, precompilation is invalid)
> +  (invoke "faketime" "-f" "1970-01-01 00:00:01" "julia" "-e" code))

Do you think it would be feasible to modify Julia to emit this fixed
timestamp, or to honor SOURCE_DATE_EPOCH, instead of using ‘faketime’?

The reason I’m asking is that (1) ‘faketime’ relies on LD_PRELOAD and so
it could introduce its own set of issues, and (2) I wouldn’t be
surprised to find ready-to-use SOURCE_DATE_EPOCH patches from fellow
Reproducible Builders floating around.  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat.
  2019-10-10 15:49   ` [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat Nicolò Balzarotti
@ 2019-12-15 21:46     ` Ludovic Courtès
  0 siblings, 0 replies; 54+ messages in thread
From: Ludovic Courtès @ 2019-12-15 21:46 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Guix Patches

Nicolò Balzarotti <anothersms@gmail.com> skribis:

> * gnu/packages/julia-xyz.scm: New file.
> * gnu/packages/julia-xyz.scm (julia-compat): New variable.

The second line is unnecessary.

However, please make sure to add the file to ‘gnu/local.mk’.

Otherwise LGTM.

Thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 03/11] gnu: julia: Adjust indentation.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (4 preceding siblings ...)
  2019-12-15 21:40   ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz Ludovic Courtès
@ 2020-01-10  9:25   ` nixo
  2020-01-17 18:40   ` [bug#38546] [PATCH 05/11] gnu: build: julia-build-system: fix package nixo
                     ` (14 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-10  9:25 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia.scm (julia): Correct indentation, untabify
---
 gnu/packages/julia.scm | 216 ++++++++++++++++++++---------------------
 1 file changed, 108 insertions(+), 108 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index a66309b611..e1c4685227 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -51,14 +51,14 @@
 
 (define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name ".patch"))
+                 "/deps/patches/" name ".patch"))
 
 (define (julia-patch name sha)
   (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (julia-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+            (uri (julia-patch-url version name))
+            (sha256 (base32 sha))
+            (file-name name))))
 
 (define libuv-julia
   (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
@@ -101,7 +101,7 @@
                 "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
               (patches
                (list
-	        (julia-patch "libunwind-prefer-extbl"
+                (julia-patch "libunwind-prefer-extbl"
                              "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
                 (julia-patch "libunwind-static-arm"
                              "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
@@ -124,45 +124,45 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (julia-patch "llvm-6.0-D44650"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (julia-patch "llvm-6.0.0_D27296-libssp"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (julia-patch "llvm-D34078-vectorize-fdiv"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (julia-patch "llvm-D44892-Perf-integration"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (julia-patch "llvm-D46460"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (julia-patch "llvm-D49832-SCEVPred"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (julia-patch "llvm-D50010-VNCoercion-ni"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (julia-patch "llvm-D50167-scev-umin"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (julia-patch "llvm-OProfile-line-num"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (julia-patch "llvm-PPC-addrspaces"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (julia-patch "llvm-rL323946-LSRTy"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (julia-patch "llvm-rL326967-aligned-load"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (julia-patch "llvm-rL327898"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+                (julia-patch "llvm-6.0-D44650"
+                            "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
+                            "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                (julia-patch "llvm-6.0-NVPTX-addrspaces"
+                            "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                (julia-patch "llvm-6.0.0_D27296-libssp"
+                            "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
+                            "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                (julia-patch "llvm-D34078-vectorize-fdiv"
+                            "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                (julia-patch "llvm-D42262-jumpthreading-not-i1"
+                            "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                (julia-patch "llvm-D44892-Perf-integration"
+                            "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                (julia-patch "llvm-D46460"
+                            "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                (julia-patch "llvm-D49832-SCEVPred"
+                            "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                (julia-patch "llvm-D50010-VNCoercion-ni"
+                            "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                (julia-patch "llvm-D50167-scev-umin"
+                            "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                (julia-patch "llvm-OProfile-line-num"
+                            "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                (julia-patch "llvm-PPC-addrspaces"
+                            "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                (julia-patch "llvm-rL323946-LSRTy"
+                            "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                (julia-patch "llvm-rL326967-aligned-load"
+                            "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                (julia-patch "llvm-rL327898"
+                            "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
         `(list ;; Taken from NixOS. Only way I could get libLLVM-6.0.so
-	  "-DCMAKE_BUILD_TYPE=Release"
+          "-DCMAKE_BUILD_TYPE=Release"
 
           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
           ;; Julia insists on it, nothing more.  This reduces build times and
@@ -170,15 +170,15 @@
           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
 
-	  "-DLLVM_INSTALL_UTILS=ON"
-	  "-DLLVM_BUILD_TESTS=ON"
-	  "-DLLVM_ENABLE_FFI=ON"
-	  "-DLLVM_ENABLE_RTTI=ON"
+          "-DLLVM_INSTALL_UTILS=ON"
+          "-DLLVM_BUILD_TESTS=ON"
+          "-DLLVM_ENABLE_FFI=ON"
+          "-DLLVM_ENABLE_RTTI=ON"
           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
-	  ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
-	  "-DLLVM_ENABLE_DUMP=ON"
-	  "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
+          ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
+          "-DLLVM_ENABLE_DUMP=ON"
+          "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
 
 (define-public julia
   (package
@@ -222,9 +222,9 @@
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-	     ;; needed by libwhich
-	     (setenv "LD_LIBRARY_PATH"
-		     (string-join (map (lambda (pkg)
+             ;; needed by libwhich
+             (setenv "LD_LIBRARY_PATH"
+                     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
                                        '("arpack-ng" "curl" "dsfmt"
@@ -234,7 +234,7 @@
                                          "openblas" "openlibm" "pcre2"
                                          "suitesparse"))
                                   ":"))
-	     #t))
+             #t))
          ;; FIXME: Building the documentation requires Julia packages that
          ;; would be downloaded from the Internet.  We should build them in a
          ;; separate build phase.
@@ -250,40 +250,40 @@
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t))
          (add-after 'unpack 'hardcode-soname-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)
-            (substitute* "base/math.jl"
-              (("const libm = Base.libm_name")
-               (string-append "const libm = \""
-                              (assoc-ref inputs "openlibm")
-                              "/lib/libopenlibm.so"
-                              "\"")))))
+           ;; ./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)
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; LIBUTF8PROC is a linker flag, not a build target.  It is
-            ;; included in the LIBFILES_* variable which is used as a
-            ;; collection of build targets and a list of libraries to link
-            ;; against.
-            (substitute* "src/flisp/Makefile"
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
+             ;; included in the LIBFILES_* variable which is used as a
+             ;; collection of build targets and a list of libraries to link
+             ;; against.
+             (substitute* "src/flisp/Makefile"
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
                 "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
                 "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
-            ;; The REPL must be linked with libuv.
-            (substitute* "ui/Makefile"
-              (("JLDFLAGS \\+= ")
-               (string-append "JLDFLAGS += "
-                              (assoc-ref %build-inputs "libuv")
-                              "/lib/libuv.so ")))
+             ;; The REPL must be linked with libuv.
+             (substitute* "ui/Makefile"
+               (("JLDFLAGS \\+= ")
+                (string-append "JLDFLAGS += "
+                               (assoc-ref %build-inputs "libuv")
+                               "/lib/libuv.so ")))
 
-            (substitute* "base/Makefile"
-              (("\\$\\(build_includedir\\)/uv/errno.h")
-               (string-append (assoc-ref inputs "libuv")
-                              "/include/uv/errno.h")))
-            #t))
+             (substitute* "base/Makefile"
+               (("\\$\\(build_includedir\\)/uv/errno.h")
+                (string-append (assoc-ref inputs "libuv")
+                               "/include/uv/errno.h")))
+             #t))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
@@ -307,7 +307,7 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-	     #t)))
+             #t)))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -331,7 +331,7 @@
         "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
-        "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
+        "USE_BLAS64=0"                  ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
@@ -339,35 +339,35 @@
         (string-append "SUITESPARSE_INC=-I "
                        (assoc-ref %build-inputs "suitesparse")
                        "/include")
-        "USE_GPL_LIBS=1"        ;proudly
+        "USE_GPL_LIBS=1"                ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
                        (assoc-ref %build-inputs "utf8proc")
                        "/include")
         "USE_SYSTEM_LLVM=1"
-	"LLVM_VER=6.0.1"
+        "LLVM_VER=6.0.1"
 
-	"USE_LLVM_SHLIB=1"
-	"USE_SYSTEM_LIBUNWIND=1"
-	"USE_SYSTEM_LIBUV=1"
-	(string-append "LIBUV="
-		       (assoc-ref %build-inputs "libuv")
-		       "/lib/libuv.so")
-	(string-append "LIBUV_INC="
-		       (assoc-ref %build-inputs "libuv")
-		       "/include")
-	"USE_SYSTEM_PATCHELF=1"
-	"USE_SYSTEM_PCRE=1"
-	"USE_SYSTEM_OPENLIBM=1"
+        "USE_LLVM_SHLIB=1"
+        "USE_SYSTEM_LIBUNWIND=1"
+        "USE_SYSTEM_LIBUV=1"
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_PATCHELF=1"
+        "USE_SYSTEM_PCRE=1"
+        "USE_SYSTEM_OPENLIBM=1"
         "USE_SYSTEM_LIBM=0"
         "USE_SYSTEM_LIBSSH2=1"
         "USE_SYSTEM_CURL=1"
-	"USE_SYSTEM_GMP=1"
-	"USE_SYSTEM_MPFR=1"
-	"USE_SYSTEM_MBEDTLS=1"
-	"USE_SYSTEM_ARPACK=1"
-	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1")))
+        "USE_SYSTEM_GMP=1"
+        "USE_SYSTEM_MPFR=1"
+        "USE_SYSTEM_MBEDTLS=1"
+        "USE_SYSTEM_ARPACK=1"
+        "USE_SYSTEM_LIBGIT2=1"
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
@@ -377,9 +377,9 @@
        ;; <https://bugs.gnu.org/30282>.
        ("arpack-ng" ,arpack-ng-3.3.0)
 
-       ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
+       ("coreutils" ,coreutils)         ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
-       ("openblas" ,openblas) ;Julia does not build with Atlas
+       ("openblas" ,openblas)           ;Julia does not build with Atlas
        ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
        ("mbedtls" ,mbedtls-apache)
@@ -411,20 +411,20 @@
             (base32
              "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs"))))
        ("libwhich"
-	,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
+        ,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
            (origin
              ;; Note: We use a /tarball URL, but that's because Julia's build
              ;; system checks the hash of that tarball; thus we can't use
              ;; 'git-fetch'.
-	     (method url-fetch)
-	     (uri (string-append
+             (method url-fetch)
+             (uri (string-append
                    "https://api.github.com/repos/vtjnash/libwhich/tarball/"
                    commit))
              (file-name (string-append "libwhich-" (string-take commit 7)
                                        ".tar.gz"))
-	     (sha256
-	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+             (sha256
+              (base32
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
        ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 05/11] gnu: build: julia-build-system: fix package
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (5 preceding siblings ...)
  2020-01-10  9:25   ` [bug#38546] [PATCH 03/11] gnu: julia: Adjust indentation nixo
@ 2020-01-17 18:40   ` nixo
  2020-01-18 12:58   ` [bug#38546] [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation timestamp nixo
                     ` (13 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-17 18:40 UTC (permalink / raw)
  To: 38546

 precompilation

---
 guix/build/julia-build-system.scm | 51 +++++++++++++------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index ff6fcf5fe3..dbd4af623d 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2019, 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,53 +37,46 @@
 ;; subpath where we store the package content
 (define %package-path "/share/julia/packages/")
 
-(define (generate-load-path inputs outputs)
-  (string-append
-   (string-join (map (match-lambda
-                       ((_ . path)
-                        (string-append path %package-path)))
-                     ;; Restrict to inputs beginning with "julia-".
-                     (filter (match-lambda
-                               ((name . _)
-                                (string-prefix? "julia-" name)))
-                             inputs))
-                ":")
-   (string-append ":" (assoc-ref outputs "out") %package-path)
-   ;; stdlib is always required to find Julia's standard libraries.
-   ;; usually there are other two paths in this variable:
-   ;; "@" and "@v#.#"
-   ":@stdlib"))
-
 (define* (install #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package-dir (string-append out %package-path
-                                     (string-append
-                                      (strip-store-file-name source)))))
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+                                     (strip-store-file-name source))))
     (mkdir-p package-dir)
-    (copy-recursively source package-dir))
+    (copy-recursively (getcwd) package-dir))
   #t)
 
-;; TODO: Precompilation is working, but I don't know how to tell
-;; julia to use use it. If (on rantime) we set HOME to
-;; store path, julia tries to write files there (failing)
 (define* (precompile #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (builddir (string-append out "/share/julia/"))
          (package (strip-store-file-name source)))
     (mkdir-p builddir)
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    ;; Actual precompilation
-    (invoke-julia (string-append "using " package)))
+    ;; add new package dir to the load path
+    (setenv "JULIA_LOAD_PATH"
+            (string-append builddir "packages/" ":"
+                           (or (getenv "JULIA_LOAD_PATH")
+                               "")))
+    ;; Actual precompilation.
+    (invoke-julia
+     ;; when using julia as a user, julia writes precompile cache to the first
+     ;; entry of the DEPOT_PATH list (by default, the home dir).  We want to
+     ;; write it to the store, so let's push the store path as the first
+     ;; element of DEPOT_PATH.  Once the cache file exists, this hack is not
+     ;; needed anymore (like in the check phase).  If the user install new
+     ;; pacakges, those will be installed and precompiled in the home dir
+     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using " package)))
   #t)
 
 (define* (check #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package (strip-store-file-name source))
          (builddir (string-append out "/share/julia/")))
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+    (setenv "JULIA_LOAD_PATH" (string-append builddir "packages/"))
     (invoke-julia (string-append "using Pkg;Pkg.test(\"" package "\")")))
   #t)
 
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation timestamp
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (6 preceding siblings ...)
  2020-01-17 18:40   ` [bug#38546] [PATCH 05/11] gnu: build: julia-build-system: fix package nixo
@ 2020-01-18 12:58   ` nixo
  2020-01-18 13:05   ` [bug#38546] [PATCH 06/11] gnu: Add julia-compat nixo
                     ` (12 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 12:58 UTC (permalink / raw)
  To: 38546


* gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch: new file
---
 gnu/local.mk                                  |  1 +
 gnu/packages/julia.scm                        |  4 ++-
 ...ia-fake-mtime-with-SOURCE_DATE_EPOCH.patch | 29 +++++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 00ff3b8d61..fe8634b44d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1010,6 +1010,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch      \
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index e4db39afbd..a66309b611 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -191,7 +191,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
new file mode 100644
index 0000000000..467e6d68d1
--- /dev/null
+++ b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
@@ -0,0 +1,29 @@
+From e4dc28db1d70819505fd1a68fd9d2bfc4fb61a7d Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@nixo.xyz>
+Date: Fri, 17 Jan 2020 11:28:30 +0100
+Subject: [PATCH] base: loading: support fake mtime with SOURCE_DATE_EPCOCH
+
+Do this when loading libraries
+---
+ base/loading.jl | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/base/loading.jl b/base/loading.jl
+index 7f11a2d4fc..1b4686d1dc 100644
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@ function _include_dependency(mod::Module, _path::AbstractString)
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++        push!(_require_dependencies,
++              (mod, path,
++               haskey(ENV, "SOURCE_DATE_EPOCH") ?
++               parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
+-- 
+2.24.1
+
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 06/11] gnu: Add julia-compat.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (7 preceding siblings ...)
  2020-01-18 12:58   ` [bug#38546] [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation timestamp nixo
@ 2020-01-18 13:05   ` nixo
  2020-01-18 13:06   ` [bug#38546] [PATCH 07/11] gnu: Add julia-inifile nixo
                     ` (11 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:05 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm: New file
* gnu/packages/julia-xyz.scm (julia-compat): New variable
---
 gnu/local.mk               |  1 +
 gnu/packages/julia-xyz.scm | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 gnu/packages/julia-xyz.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index fe8634b44d..e07229ee20 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -277,6 +277,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/jrnl.scm				\
   %D%/packages/jose.scm				\
   %D%/packages/julia.scm			\
+  %D%/packages/julia-xyz.scm			\
   %D%/packages/jupyter.scm			\
   %D%/packages/kawa.scm				\
   %D%/packages/kde.scm				\
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
new file mode 100644
index 0000000000..7d9faa63e9
--- /dev/null
+++ b/gnu/packages/julia-xyz.scm
@@ -0,0 +1,27 @@
+(define-module (gnu packages julia-xyz)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system julia))
+
+(define-public julia-compat
+  (package
+    (name "julia-compat")
+    (version "3.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/Compat.jl")
+             (commit (string-append "v" version))))
+       (file-name "Compat")
+       (sha256
+        (base32 "0d21h3l2ry2mmlhpg7b9cxifayzwcv7r13h5wydcbd5pjf6k4qd4"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/Compat.jl")
+    (synopsis "Compatibility across Julia versions")
+    (description "The Compat package is designed to ease interoperability
+between older and newer versions of the Julia language.  The Compat package
+provides a macro that lets you use the latest syntax in a backwards-compatible
+way.")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 07/11] gnu: Add julia-inifile.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (8 preceding siblings ...)
  2020-01-18 13:05   ` [bug#38546] [PATCH 06/11] gnu: Add julia-compat nixo
@ 2020-01-18 13:06   ` nixo
  2020-01-18 13:07   ` [bug#38546] [PATCH 08/11] gnu: Add julia-sha nixo
                     ` (10 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:06 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm (julia-inifile): New variable.
---
 gnu/packages/julia-xyz.scm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 7d9faa63e9..6b8053e5f8 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -25,3 +25,23 @@ between older and newer versions of the Julia language.  The Compat package
 provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
+
+(define-public julia-inifile
+  (package
+    (name "julia-inifile")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/IniFile.jl")
+             (commit "8ba59958495fa276d6489d2c3903e765d75e0bc0")))
+       (file-name "IniFile")
+       (sha256
+        (base32 "11h6f99jpbg729lplw841m68jprka7q3n8yw390bndlmcdsjabpd"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaIO/IniFile.jl")
+    (synopsis "Reading Windows-style INI files")
+    (description "This is a julia package that defines an IniFile type that
+allows to interface with @file{.ini} files")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 08/11] gnu: Add julia-sha.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (9 preceding siblings ...)
  2020-01-18 13:06   ` [bug#38546] [PATCH 07/11] gnu: Add julia-inifile nixo
@ 2020-01-18 13:07   ` nixo
  2020-01-18 13:07   ` [bug#38546] [PATCH 09/11] gnu: Add julia-binaryprovider nixo
                     ` (9 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:07 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm (julia-sha): New variable.
---
 gnu/packages/julia-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 6b8053e5f8..92ffde58e7 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -45,3 +45,26 @@ way.")
     (description "This is a julia package that defines an IniFile type that
 allows to interface with @file{.ini} files")
     (license license:expat)))
+
+(define-public julia-sha
+  (package
+    (name "julia-sha")
+    (version "0.5.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/staticfloat/SHA.jl")
+             (commit (string-append "v" version))))
+       (file-name "SHA")
+       (sha256
+        (base32 "10a09kg9z0m8rvwmlgsna6p342kyvizx2axdqc6pzyhraddr8jrp"))))
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/staticfloat/SHA.jl")
+    (synopsis
+     "Performant, 100% native-julia SHA1, SHA2, and SHA3 implementation")
+    (description "Julia package implementing SHA algorithms.  Each exported
+function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
+@code{IO} object.")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 09/11] gnu: Add julia-binaryprovider.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (10 preceding siblings ...)
  2020-01-18 13:07   ` [bug#38546] [PATCH 08/11] gnu: Add julia-sha nixo
@ 2020-01-18 13:07   ` nixo
  2020-01-18 13:11   ` [bug#38546] [PATCH 10/11] gnu: Add julia-mbedtls nixo
                     ` (8 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:07 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm (julia-binaryprovider): New variable.
---
 gnu/packages/julia-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 92ffde58e7..0f8e04b4d1 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,3 +68,36 @@ allows to interface with @file{.ini} files")
 function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
 @code{IO} object.")
     (license license:expat)))
+
+(define-public julia-binaryprovider
+  (package
+    (name "julia-binaryprovider")
+    (version "0.5.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaPackaging/BinaryProvider.jl")
+             (commit (string-append "v" version))))
+       (file-name "BinaryProvider")
+       (sha256
+        (base32 "174jmg4w8ncgfhdvfnm0p4cnlayw31j4s9sksqlwz1sipywqvww7"))))
+    (propagated-inputs `(("julia-sha" ,julia-sha)))
+    ;; We don't really need BinaryProvider (as guix provides the binaries) but
+    ;; since it's a dependency of other packages we want to precompile it.
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-engine-probe
+           (lambda _
+             (substitute* "src/BinaryProvider.jl"
+               ;; Precompilation tries to download things from the internet,
+               ;; disable the download part
+               (("probe_platform_engines") "# probe_platform_engines"))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaPackaging/BinaryProvider.jl")
+    (synopsis "Reliable Binary provider for Julia")
+    (description "@code{BinaryProvider.jl} simplifies the installation of
+binaries required by julia packages.")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 10/11] gnu: Add julia-mbedtls.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (11 preceding siblings ...)
  2020-01-18 13:07   ` [bug#38546] [PATCH 09/11] gnu: Add julia-binaryprovider nixo
@ 2020-01-18 13:11   ` nixo
  2020-01-18 13:11   ` [bug#38546] [PATCH 11/11] gnu: Add julia-http nixo
                     ` (7 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:11 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm (julia-mbedtls): New variable.
---
 gnu/packages/julia-xyz.scm | 49 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 0f8e04b4d1..3e9f532697 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -2,7 +2,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix git-download)
-  #:use-module (guix build-system julia))
+  #:use-module (guix build-system julia)
+  #:use-module (gnu packages tls))
 
 (define-public julia-compat
   (package
@@ -101,3 +102,49 @@ function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
     (description "@code{BinaryProvider.jl} simplifies the installation of
 binaries required by julia packages.")
     (license license:expat)))
+
+(define-public julia-mbedtls
+  (package
+    (name "julia-mbedtls")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/MbedTLS.jl")
+             (commit (string-append "v" version))))
+       (file-name "MbedTLS")
+       (sha256
+        (base32 "1a8snw9gi21lm6r3kh6ly7ngi99s9k5shqkfiizj3g9li20q23h2"))))
+    (propagated-inputs
+     `(("julia-binaryprovider" ,julia-binaryprovider)
+       ("mbedtls-apache" ,mbedtls-apache)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'precompile 'build-deps
+           (lambda* (#:key outputs source inputs #:allow-other-keys)
+             (let ((f (open-file
+                       (string-append
+                        (assoc-ref outputs "out")
+                        "/share/julia/packages/"
+                        (string-append
+                         (strip-store-file-name source) "/deps/deps.jl"))
+                       "w")))
+               (display (string-append "const libmbedcrypto = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedcrypto.so\"\n") f)
+               (display (string-append "const libmbedtls = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedtls.so\"\n") f)
+               (display (string-append "const libmbedx509 = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedx509.so\"\n") f)
+               (close-port f))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/MbedTLS.jl")
+    (synopsis "Apache's mbed TLS library wrapper")
+    (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
+cryptography C libary for Julia.")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 11/11] gnu: Add julia-http.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (12 preceding siblings ...)
  2020-01-18 13:11   ` [bug#38546] [PATCH 10/11] gnu: Add julia-mbedtls nixo
@ 2020-01-18 13:11   ` nixo
  2020-01-18 13:23   ` [bug#38546] [PATCH 04/11] use wrapper to set JULIA_LOAD_PATH and JULIA_DEPOT_PATH nixo
                     ` (6 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:11 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia-xyz.scm (julia-http): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 3e9f532697..ff1bb483f9 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -148,3 +148,27 @@ binaries required by julia packages.")
     (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
 cryptography C libary for Julia.")
     (license license:expat)))
+
+(define-public julia-http
+  (package
+    (name "julia-http")
+    (version "0.8.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaWeb/HTTP.jl")
+             (commit (string-append "v" version))))
+       (file-name "HTTP")
+       (sha256
+        (base32 "0928fvncfp07i5hvqxjyj8i27xmxxllas1m5idqq2i8h7jshzq3y"))))
+    (propagated-inputs
+     `(("julia-inifile" ,julia-inifile)
+       ("julia-mbedtls" ,julia-mbedtls)
+       ("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://juliaweb.github.io/HTTP.jl/")
+    (synopsis "HTTP support for Julia")
+    (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
+implementing both a client and a server.")
+    (license license:expat)))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH 04/11] use wrapper to set JULIA_LOAD_PATH and JULIA_DEPOT_PATH
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (13 preceding siblings ...)
  2020-01-18 13:11   ` [bug#38546] [PATCH 11/11] gnu: Add julia-http nixo
@ 2020-01-18 13:23   ` nixo
  2020-01-18 13:32   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/11] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
                     ` (5 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: nixo @ 2020-01-18 13:23 UTC (permalink / raw)
  To: 38546


---
 gnu/packages/julia.scm | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index e1c4685227..39c7d6d34f 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -297,7 +297,9 @@
                 ;; running order.  I think it depends on the number of
                 ;; runners, disabling it for now
                 ;; https://github.com/JuliaLang/julia/issues/34330
-                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",
+                                          \"stacktraces\",\"stress\",\"precompile\"]),
+                                testnames)"))
              ;; When HOME is not set, julia calls uv_os_homedir, which in
              ;; turns call getpwuid_r. Add the HOME env variable to the
              ;; external julia call to fix this
@@ -307,11 +309,23 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-             #t)))
+             #t))
+         (add-after 'install 'make-wrapper
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (program "julia"))
+               (with-directory-excursion bin
+                 (wrap-program program
+                   `("JULIA_LOAD_PATH" ":" prefix
+                     ("" "$JULIA_LOAD_PATH")))
+                 (wrap-program program
+                   `("JULIA_DEPOT_PATH" ":" prefix
+                     ("" "$JULIA_DEPOT_PATH"))))
+               #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
-        (string-append "PREFIX=" (assoc-ref %outputs "out"))
 
         ;; Passing the MARCH flag is necessary to build binary substitutes for
         ;; the supported architectures.
@@ -435,7 +449,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [Nicolò Balzarotti] [PATCH 00/11] Update julia to 1.3.1, fix precompilation, add HTTP.jl
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (14 preceding siblings ...)
  2020-01-18 13:23   ` [bug#38546] [PATCH 04/11] use wrapper to set JULIA_LOAD_PATH and JULIA_DEPOT_PATH nixo
@ 2020-01-18 13:32   ` Nicolò Balzarotti
  2020-01-18 13:36   ` [bug#38546] [nixo] [PATCH 01/11] gnu: julia: Update to 1.3.1 Nicolò Balzarotti
                     ` (4 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-18 13:32 UTC (permalink / raw)
  To: 38546


Ok I had time to look at this again.

1. Package installation can be done both the julia way and the guix way
2. SOURCE_DATE_EPOCH is respected in package precompile timestamp. Other fixes are needed to get reproducible builds, but for now that means that package cache is used.
3. This patch adds some first julia package (HTTP.jl and dependencies) 
4. Updated julia to 1.3.1 (latest release). It's working great and the
build recipe is simplified a lot.  However, some test is failing.  The
"interesting" part is that when running tests alone, they are working.
It seems like the problem arise when tests are run on the _same core_
and not on different cores.  I opened a issue upstream for this
(https://github.com/JuliaLang/julia/issues/34330), I'll have to look
further on it, but for now if it's fine for me this is ready to be merged.

I'm sending the patch series here.

Thanks, Nicolò

Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> (+Cc: bug report.)
>
> Nicolò Balzarotti <anothersms@gmail.com> skribis:
>
>> Ludovic Courtès <ludo@gnu.org> writes:
>>
>>> Hi!
>>>
>>> nixo <anothersms@gmail.com> skribis:
>>>
>>>> This set of patches improve the state of julia-build-system.
>>>>
>>>> 1. set path JULIA_LOAD_PATH to enable installing packages, and
>>>>   JULIA_DEPOT_PATH to allow guix-precompiled cache to be recognized by julia. To
>>>
>>> These two environment variables are supported upstream, right?
>>
>> Yes, those variables are documented here:
>> https://docs.julialang.org/en/v1/manual/environment-variables/index.html
>
> Great.
>
>> Should user be allowed to manually install packages in his own private
>> home folder manually? (I just tried with R: R recognize the store is RO
>> and ask for an alternative path). I'll try to allow "standard" package
>> installation and submit the patch again (also, I just read you other
>> comments, so I'll fix everything!)
>
> I think users should have the option to install packages in the normal
> Julia way, without Guix.
>
>>>>   do this, a small "hack" with libfaketime was required (julia decides if the
>>>>   cache is valid by comparing source ".jl" mtime with cache ".ji" file, in which
>>>>   julia stores a timestamp. We need to force this timestamp to be equal to the
>>>>   mtime of guix-store files).
>>>
>>> OK.  This hack shouldn’t break “normal” Julia uses (outside of the
>>> store), right?
>> You are right, the issue is that julia finds its src (.jl) file to have
>> a different (although older) timestamp (because guix fixes the
>> mtime). This applies only to cache files placed in the store. Other
>> cache files (non-guix installed files) have the right timestamp, so are
>> not affected (I don't know if this explanation is clear. The TLDR is:
>> with this hack store works without double-precompilation, non-store
>> works normally, too).
>> However, I'll check if I can make it work with SOURCE_DATE_EPOCH. I
>> already read the code responsible for precompilation, so hopefully it
>> won't take too much time
>
> Awesome, thanks!
>
> Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [nixo] [PATCH 01/11] gnu: julia: Update to 1.3.1.
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (15 preceding siblings ...)
  2020-01-18 13:32   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/11] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
@ 2020-01-18 13:36   ` Nicolò Balzarotti
  2020-01-18 13:42   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/10] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
                     ` (3 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-18 13:36 UTC (permalink / raw)
  To: 38546


* gnu/packages/julia.scm (julia): Update to 1.3.1.
* gnu/packages/julia.scm (libuv-julia): Update to 2.0.0.
---
 gnu/packages/julia.scm | 278 +++++++++++++++++------------------------
 1 file changed, 113 insertions(+), 165 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..e4db39afbd 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin (method url-fetch)
+	    (uri (julia-patch-url version name))
+	    (sha256 (base32 sha))
+	    (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; julia requires a patched version
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+	        (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/JuliaLang/libuv")))
 
 (define llvm-julia
   (package
@@ -99,39 +124,39 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
+	        (julia-patch "llvm-6.0-D44650"
 			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
+	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
 			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
+	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
 			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
+	        (julia-patch "llvm-6.0.0_D27296-libssp"
 			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
+	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
 			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
+	        (julia-patch "llvm-D34078-vectorize-fdiv"
 			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
+	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
 			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
+	        (julia-patch "llvm-D44892-Perf-integration"
 			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
+	        (julia-patch "llvm-D46460"
 			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
+	        (julia-patch "llvm-D49832-SCEVPred"
 			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
+	        (julia-patch "llvm-D50010-VNCoercion-ni"
 			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
+	        (julia-patch "llvm-D50167-scev-umin"
 			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
+	        (julia-patch "llvm-OProfile-line-num"
 			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
+	        (julia-patch "llvm-PPC-addrspaces"
 			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
+	        (julia-patch "llvm-rL323946-LSRTy"
 			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
+	        (julia-patch "llvm-rL326967-aligned-load"
 			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
+	        (julia-patch "llvm-rL327898"
 			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
@@ -158,7 +183,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +191,7 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +213,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +252,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +265,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,38 +283,28 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
@@ -345,26 +322,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +357,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +378,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +393,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +423,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
-- 
2.24.1

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [Nicolò Balzarotti] [PATCH 00/10] Update julia to 1.3.1, fix precompilation, add HTTP.jl
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (16 preceding siblings ...)
  2020-01-18 13:36   ` [bug#38546] [nixo] [PATCH 01/11] gnu: julia: Update to 1.3.1 Nicolò Balzarotti
@ 2020-01-18 13:42   ` Nicolò Balzarotti
  2020-01-18 13:59   ` [bug#38546] [00/11] Update Julia, Fix " Nicolò Balzarotti
                     ` (2 subsequent siblings)
  20 siblings, 0 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-18 13:42 UTC (permalink / raw)
  To: 38546


Ok I had time to look at this again.

1. Package installation can be done both the julia way and the guix way
2. SOURCE_DATE_EPOCH is respected in package precompile timestamp. Other fixes are needed to get reproducible builds, but for now that means that package cache is used.
3. This patch adds some first julia package (HTTP.jl and dependencies) 
4. Updated julia to 1.3.1 (latest release). It's working great and the
build recipe is simplified a lot.  However, some test is failing.  The
"interesting" part is that when running tests alone, they are working.
It seems like the problem arise when tests are run on the _same core_
and not on different cores.  I opened a issue upstream for this
(https://github.com/JuliaLang/julia/issues/34330), I'll have to look
further on it, but for now if it's fine for me this is ready to be merged.

I'm sending the patch series here.

Thanks, Nicolò

Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> (+Cc: bug report.)
>
> Nicolò Balzarotti <anothersms@gmail.com> skribis:
>
>> Ludovic Courtès <ludo@gnu.org> writes:
>>
>>> Hi!
>>>
>>> nixo <anothersms@gmail.com> skribis:
>>>
>>>> This set of patches improve the state of julia-build-system.
>>>>
>>>> 1. set path JULIA_LOAD_PATH to enable installing packages, and
>>>>   JULIA_DEPOT_PATH to allow guix-precompiled cache to be recognized by julia. To
>>>
>>> These two environment variables are supported upstream, right?
>>
>> Yes, those variables are documented here:
>> https://docs.julialang.org/en/v1/manual/environment-variables/index.html
>
> Great.
>
>> Should user be allowed to manually install packages in his own private
>> home folder manually? (I just tried with R: R recognize the store is RO
>> and ask for an alternative path). I'll try to allow "standard" package
>> installation and submit the patch again (also, I just read you other
>> comments, so I'll fix everything!)
>
> I think users should have the option to install packages in the normal
> Julia way, without Guix.
>
>>>>   do this, a small "hack" with libfaketime was required (julia decides if the
>>>>   cache is valid by comparing source ".jl" mtime with cache ".ji" file, in which
>>>>   julia stores a timestamp. We need to force this timestamp to be equal to the
>>>>   mtime of guix-store files).
>>>
>>> OK.  This hack shouldn’t break “normal” Julia uses (outside of the
>>> store), right?
>> You are right, the issue is that julia finds its src (.jl) file to have
>> a different (although older) timestamp (because guix fixes the
>> mtime). This applies only to cache files placed in the store. Other
>> cache files (non-guix installed files) have the right timestamp, so are
>> not affected (I don't know if this explanation is clear. The TLDR is:
>> with this hack store works without double-precompilation, non-store
>> works normally, too).
>> However, I'll check if I can make it work with SOURCE_DATE_EPOCH. I
>> already read the code responsible for precompilation, so hopefully it
>> won't take too much time
>
> Awesome, thanks!
>
> Ludo’.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (17 preceding siblings ...)
  2020-01-18 13:42   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/10] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
@ 2020-01-18 13:59   ` Nicolò Balzarotti
  2020-01-20 18:49     ` zimoun
  2020-01-18 14:35   ` [bug#38546] Julia patches v3 Nicolò Balzarotti
  2020-02-11 17:58   ` [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done zimoun
  20 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-18 13:59 UTC (permalink / raw)
  To: 38546; +Cc: Ludovic Courtès

[-- Attachment #1: Type: text/plain, Size: 95 bytes --]


I'm sending the patches again as attachments since I think some of them
was badly formatted.


[-- Attachment #2: 0001-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 21549 bytes --]

From 74c02f9b22a4d7cf0bc9a98c17ed69af80cacb0e Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Thu, 12 Dec 2019 09:43:20 +0100
Subject: [PATCH 01/11] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1.
* gnu/packages/julia.scm (libuv-julia): Update to 2.0.0.
---
 gnu/packages/julia.scm | 278 +++++++++++++++++------------------------
 1 file changed, 113 insertions(+), 165 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..e4db39afbd 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin (method url-fetch)
+	    (uri (julia-patch-url version name))
+	    (sha256 (base32 sha))
+	    (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; julia requires a patched version
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+	        (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/JuliaLang/libuv")))
 
 (define llvm-julia
   (package
@@ -99,39 +124,39 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
+	        (julia-patch "llvm-6.0-D44650"
 			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
+	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
 			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
+	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
 			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
+	        (julia-patch "llvm-6.0.0_D27296-libssp"
 			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
+	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
 			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
+	        (julia-patch "llvm-D34078-vectorize-fdiv"
 			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
+	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
 			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
+	        (julia-patch "llvm-D44892-Perf-integration"
 			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
+	        (julia-patch "llvm-D46460"
 			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
+	        (julia-patch "llvm-D49832-SCEVPred"
 			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
+	        (julia-patch "llvm-D50010-VNCoercion-ni"
 			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
+	        (julia-patch "llvm-D50167-scev-umin"
 			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
+	        (julia-patch "llvm-OProfile-line-num"
 			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
+	        (julia-patch "llvm-PPC-addrspaces"
 			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
+	        (julia-patch "llvm-rL323946-LSRTy"
 			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
+	        (julia-patch "llvm-rL326967-aligned-load"
 			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
+	        (julia-patch "llvm-rL327898"
 			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
@@ -158,7 +183,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +191,7 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +213,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +252,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +265,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,38 +283,28 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
@@ -345,26 +322,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +357,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +378,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +393,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +423,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-julia-use-SOURCE_DATE_EPOCH-for-precompilation-t.patch --]
[-- Type: text/x-patch, Size: 3117 bytes --]

From aa245450a7c8a92c29388cc6603ff43f278dfdd7 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 13:58:37 +0100
Subject: [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation
 timestamp

* gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch: new file
---
 gnu/local.mk                                  |  1 +
 gnu/packages/julia.scm                        |  4 ++-
 ...ia-fake-mtime-with-SOURCE_DATE_EPOCH.patch | 29 +++++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 00ff3b8d61..fe8634b44d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1010,6 +1010,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch      \
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index e4db39afbd..a66309b611 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -191,7 +191,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
new file mode 100644
index 0000000000..467e6d68d1
--- /dev/null
+++ b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
@@ -0,0 +1,29 @@
+From e4dc28db1d70819505fd1a68fd9d2bfc4fb61a7d Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@nixo.xyz>
+Date: Fri, 17 Jan 2020 11:28:30 +0100
+Subject: [PATCH] base: loading: support fake mtime with SOURCE_DATE_EPCOCH
+
+Do this when loading libraries
+---
+ base/loading.jl | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/base/loading.jl b/base/loading.jl
+index 7f11a2d4fc..1b4686d1dc 100644
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@ function _include_dependency(mod::Module, _path::AbstractString)
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++        push!(_require_dependencies,
++              (mod, path,
++               haskey(ENV, "SOURCE_DATE_EPOCH") ?
++               parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
+-- 
+2.24.1
+
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-julia-Adjust-indentation.patch --]
[-- Type: text/x-patch, Size: 16196 bytes --]

From 66a9b56bfbc66d5c4c21e5f67c6f759a7f838786 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Fri, 10 Jan 2020 10:25:49 +0100
Subject: [PATCH 03/11] gnu: julia: Adjust indentation.

* gnu/packages/julia.scm (julia): Correct indentation, untabify
---
 gnu/packages/julia.scm | 216 ++++++++++++++++++++---------------------
 1 file changed, 108 insertions(+), 108 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index a66309b611..e1c4685227 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -51,14 +51,14 @@
 
 (define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name ".patch"))
+                 "/deps/patches/" name ".patch"))
 
 (define (julia-patch name sha)
   (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (julia-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+            (uri (julia-patch-url version name))
+            (sha256 (base32 sha))
+            (file-name name))))
 
 (define libuv-julia
   (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
@@ -101,7 +101,7 @@
                 "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
               (patches
                (list
-	        (julia-patch "libunwind-prefer-extbl"
+                (julia-patch "libunwind-prefer-extbl"
                              "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
                 (julia-patch "libunwind-static-arm"
                              "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
@@ -124,45 +124,45 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (julia-patch "llvm-6.0-D44650"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (julia-patch "llvm-6.0.0_D27296-libssp"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (julia-patch "llvm-D34078-vectorize-fdiv"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (julia-patch "llvm-D44892-Perf-integration"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (julia-patch "llvm-D46460"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (julia-patch "llvm-D49832-SCEVPred"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (julia-patch "llvm-D50010-VNCoercion-ni"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (julia-patch "llvm-D50167-scev-umin"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (julia-patch "llvm-OProfile-line-num"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (julia-patch "llvm-PPC-addrspaces"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (julia-patch "llvm-rL323946-LSRTy"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (julia-patch "llvm-rL326967-aligned-load"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (julia-patch "llvm-rL327898"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+                (julia-patch "llvm-6.0-D44650"
+                            "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
+                            "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                (julia-patch "llvm-6.0-NVPTX-addrspaces"
+                            "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                (julia-patch "llvm-6.0.0_D27296-libssp"
+                            "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
+                            "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                (julia-patch "llvm-D34078-vectorize-fdiv"
+                            "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                (julia-patch "llvm-D42262-jumpthreading-not-i1"
+                            "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                (julia-patch "llvm-D44892-Perf-integration"
+                            "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                (julia-patch "llvm-D46460"
+                            "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                (julia-patch "llvm-D49832-SCEVPred"
+                            "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                (julia-patch "llvm-D50010-VNCoercion-ni"
+                            "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                (julia-patch "llvm-D50167-scev-umin"
+                            "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                (julia-patch "llvm-OProfile-line-num"
+                            "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                (julia-patch "llvm-PPC-addrspaces"
+                            "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                (julia-patch "llvm-rL323946-LSRTy"
+                            "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                (julia-patch "llvm-rL326967-aligned-load"
+                            "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                (julia-patch "llvm-rL327898"
+                            "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
         `(list ;; Taken from NixOS. Only way I could get libLLVM-6.0.so
-	  "-DCMAKE_BUILD_TYPE=Release"
+          "-DCMAKE_BUILD_TYPE=Release"
 
           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
           ;; Julia insists on it, nothing more.  This reduces build times and
@@ -170,15 +170,15 @@
           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
 
-	  "-DLLVM_INSTALL_UTILS=ON"
-	  "-DLLVM_BUILD_TESTS=ON"
-	  "-DLLVM_ENABLE_FFI=ON"
-	  "-DLLVM_ENABLE_RTTI=ON"
+          "-DLLVM_INSTALL_UTILS=ON"
+          "-DLLVM_BUILD_TESTS=ON"
+          "-DLLVM_ENABLE_FFI=ON"
+          "-DLLVM_ENABLE_RTTI=ON"
           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
-	  ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
-	  "-DLLVM_ENABLE_DUMP=ON"
-	  "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
+          ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
+          "-DLLVM_ENABLE_DUMP=ON"
+          "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
 
 (define-public julia
   (package
@@ -222,9 +222,9 @@
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-	     ;; needed by libwhich
-	     (setenv "LD_LIBRARY_PATH"
-		     (string-join (map (lambda (pkg)
+             ;; needed by libwhich
+             (setenv "LD_LIBRARY_PATH"
+                     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
                                        '("arpack-ng" "curl" "dsfmt"
@@ -234,7 +234,7 @@
                                          "openblas" "openlibm" "pcre2"
                                          "suitesparse"))
                                   ":"))
-	     #t))
+             #t))
          ;; FIXME: Building the documentation requires Julia packages that
          ;; would be downloaded from the Internet.  We should build them in a
          ;; separate build phase.
@@ -250,40 +250,40 @@
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t))
          (add-after 'unpack 'hardcode-soname-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)
-            (substitute* "base/math.jl"
-              (("const libm = Base.libm_name")
-               (string-append "const libm = \""
-                              (assoc-ref inputs "openlibm")
-                              "/lib/libopenlibm.so"
-                              "\"")))))
+           ;; ./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)
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; LIBUTF8PROC is a linker flag, not a build target.  It is
-            ;; included in the LIBFILES_* variable which is used as a
-            ;; collection of build targets and a list of libraries to link
-            ;; against.
-            (substitute* "src/flisp/Makefile"
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
+             ;; included in the LIBFILES_* variable which is used as a
+             ;; collection of build targets and a list of libraries to link
+             ;; against.
+             (substitute* "src/flisp/Makefile"
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
                 "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
                 "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
-            ;; The REPL must be linked with libuv.
-            (substitute* "ui/Makefile"
-              (("JLDFLAGS \\+= ")
-               (string-append "JLDFLAGS += "
-                              (assoc-ref %build-inputs "libuv")
-                              "/lib/libuv.so ")))
+             ;; The REPL must be linked with libuv.
+             (substitute* "ui/Makefile"
+               (("JLDFLAGS \\+= ")
+                (string-append "JLDFLAGS += "
+                               (assoc-ref %build-inputs "libuv")
+                               "/lib/libuv.so ")))
 
-            (substitute* "base/Makefile"
-              (("\\$\\(build_includedir\\)/uv/errno.h")
-               (string-append (assoc-ref inputs "libuv")
-                              "/include/uv/errno.h")))
-            #t))
+             (substitute* "base/Makefile"
+               (("\\$\\(build_includedir\\)/uv/errno.h")
+                (string-append (assoc-ref inputs "libuv")
+                               "/include/uv/errno.h")))
+             #t))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
@@ -307,7 +307,7 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-	     #t)))
+             #t)))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -331,7 +331,7 @@
         "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
-        "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
+        "USE_BLAS64=0"                  ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
@@ -339,35 +339,35 @@
         (string-append "SUITESPARSE_INC=-I "
                        (assoc-ref %build-inputs "suitesparse")
                        "/include")
-        "USE_GPL_LIBS=1"        ;proudly
+        "USE_GPL_LIBS=1"                ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
                        (assoc-ref %build-inputs "utf8proc")
                        "/include")
         "USE_SYSTEM_LLVM=1"
-	"LLVM_VER=6.0.1"
+        "LLVM_VER=6.0.1"
 
-	"USE_LLVM_SHLIB=1"
-	"USE_SYSTEM_LIBUNWIND=1"
-	"USE_SYSTEM_LIBUV=1"
-	(string-append "LIBUV="
-		       (assoc-ref %build-inputs "libuv")
-		       "/lib/libuv.so")
-	(string-append "LIBUV_INC="
-		       (assoc-ref %build-inputs "libuv")
-		       "/include")
-	"USE_SYSTEM_PATCHELF=1"
-	"USE_SYSTEM_PCRE=1"
-	"USE_SYSTEM_OPENLIBM=1"
+        "USE_LLVM_SHLIB=1"
+        "USE_SYSTEM_LIBUNWIND=1"
+        "USE_SYSTEM_LIBUV=1"
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_PATCHELF=1"
+        "USE_SYSTEM_PCRE=1"
+        "USE_SYSTEM_OPENLIBM=1"
         "USE_SYSTEM_LIBM=0"
         "USE_SYSTEM_LIBSSH2=1"
         "USE_SYSTEM_CURL=1"
-	"USE_SYSTEM_GMP=1"
-	"USE_SYSTEM_MPFR=1"
-	"USE_SYSTEM_MBEDTLS=1"
-	"USE_SYSTEM_ARPACK=1"
-	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1")))
+        "USE_SYSTEM_GMP=1"
+        "USE_SYSTEM_MPFR=1"
+        "USE_SYSTEM_MBEDTLS=1"
+        "USE_SYSTEM_ARPACK=1"
+        "USE_SYSTEM_LIBGIT2=1"
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
@@ -377,9 +377,9 @@
        ;; <https://bugs.gnu.org/30282>.
        ("arpack-ng" ,arpack-ng-3.3.0)
 
-       ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
+       ("coreutils" ,coreutils)         ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
-       ("openblas" ,openblas) ;Julia does not build with Atlas
+       ("openblas" ,openblas)           ;Julia does not build with Atlas
        ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
        ("mbedtls" ,mbedtls-apache)
@@ -411,20 +411,20 @@
             (base32
              "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs"))))
        ("libwhich"
-	,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
+        ,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
            (origin
              ;; Note: We use a /tarball URL, but that's because Julia's build
              ;; system checks the hash of that tarball; thus we can't use
              ;; 'git-fetch'.
-	     (method url-fetch)
-	     (uri (string-append
+             (method url-fetch)
+             (uri (string-append
                    "https://api.github.com/repos/vtjnash/libwhich/tarball/"
                    commit))
              (file-name (string-append "libwhich-" (string-take commit 7)
                                        ".tar.gz"))
-	     (sha256
-	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+             (sha256
+              (base32
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
        ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-use-wrapper-to-set-JULIA_LOAD_PATH-and-JULIA_DEPOT_P.patch --]
[-- Type: text/x-patch, Size: 2924 bytes --]

From fe1f84062e88b6e4d77f35f12d7219fd47687c3a Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:23:44 +0100
Subject: [PATCH 04/11] use wrapper to set JULIA_LOAD_PATH and JULIA_DEPOT_PATH

---
 gnu/packages/julia.scm | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index e1c4685227..39c7d6d34f 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -297,7 +297,9 @@
                 ;; running order.  I think it depends on the number of
                 ;; runners, disabling it for now
                 ;; https://github.com/JuliaLang/julia/issues/34330
-                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",
+                                          \"stacktraces\",\"stress\",\"precompile\"]),
+                                testnames)"))
              ;; When HOME is not set, julia calls uv_os_homedir, which in
              ;; turns call getpwuid_r. Add the HOME env variable to the
              ;; external julia call to fix this
@@ -307,11 +309,23 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-             #t)))
+             #t))
+         (add-after 'install 'make-wrapper
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (program "julia"))
+               (with-directory-excursion bin
+                 (wrap-program program
+                   `("JULIA_LOAD_PATH" ":" prefix
+                     ("" "$JULIA_LOAD_PATH")))
+                 (wrap-program program
+                   `("JULIA_DEPOT_PATH" ":" prefix
+                     ("" "$JULIA_DEPOT_PATH"))))
+               #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
-        (string-append "PREFIX=" (assoc-ref %outputs "out"))
 
         ;; Passing the MARCH flag is necessary to build binary substitutes for
         ;; the supported architectures.
@@ -435,7 +449,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
-- 
2.24.1


[-- Attachment #6: 0005-gnu-build-julia-build-system-fix-package-precompilat.patch --]
[-- Type: text/x-patch, Size: 4401 bytes --]

From 3191a0958c97831bc65750a6c4231d449e92aca3 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Fri, 17 Jan 2020 19:40:55 +0100
Subject: [PATCH 05/11] gnu: build: julia-build-system: fix package
 precompilation

---
 guix/build/julia-build-system.scm | 51 +++++++++++++------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index ff6fcf5fe3..dbd4af623d 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2019, 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,53 +37,46 @@
 ;; subpath where we store the package content
 (define %package-path "/share/julia/packages/")
 
-(define (generate-load-path inputs outputs)
-  (string-append
-   (string-join (map (match-lambda
-                       ((_ . path)
-                        (string-append path %package-path)))
-                     ;; Restrict to inputs beginning with "julia-".
-                     (filter (match-lambda
-                               ((name . _)
-                                (string-prefix? "julia-" name)))
-                             inputs))
-                ":")
-   (string-append ":" (assoc-ref outputs "out") %package-path)
-   ;; stdlib is always required to find Julia's standard libraries.
-   ;; usually there are other two paths in this variable:
-   ;; "@" and "@v#.#"
-   ":@stdlib"))
-
 (define* (install #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package-dir (string-append out %package-path
-                                     (string-append
-                                      (strip-store-file-name source)))))
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+                                     (strip-store-file-name source))))
     (mkdir-p package-dir)
-    (copy-recursively source package-dir))
+    (copy-recursively (getcwd) package-dir))
   #t)
 
-;; TODO: Precompilation is working, but I don't know how to tell
-;; julia to use use it. If (on rantime) we set HOME to
-;; store path, julia tries to write files there (failing)
 (define* (precompile #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (builddir (string-append out "/share/julia/"))
          (package (strip-store-file-name source)))
     (mkdir-p builddir)
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    ;; Actual precompilation
-    (invoke-julia (string-append "using " package)))
+    ;; add new package dir to the load path
+    (setenv "JULIA_LOAD_PATH"
+            (string-append builddir "packages/" ":"
+                           (or (getenv "JULIA_LOAD_PATH")
+                               "")))
+    ;; Actual precompilation.
+    (invoke-julia
+     ;; when using julia as a user, julia writes precompile cache to the first
+     ;; entry of the DEPOT_PATH list (by default, the home dir).  We want to
+     ;; write it to the store, so let's push the store path as the first
+     ;; element of DEPOT_PATH.  Once the cache file exists, this hack is not
+     ;; needed anymore (like in the check phase).  If the user install new
+     ;; pacakges, those will be installed and precompiled in the home dir
+     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using " package)))
   #t)
 
 (define* (check #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package (strip-store-file-name source))
          (builddir (string-append out "/share/julia/")))
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+    (setenv "JULIA_LOAD_PATH" (string-append builddir "packages/"))
     (invoke-julia (string-append "using Pkg;Pkg.test(\"" package "\")")))
   #t)
 
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-gnu-Add-julia-compat.patch --]
[-- Type: text/x-patch, Size: 2072 bytes --]

From 7aabfd980a00fa292e73db66230a0558389a9011 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:05:00 +0100
Subject: [PATCH 06/11] gnu: Add julia-compat.

* gnu/packages/julia-xyz.scm: New file
* gnu/packages/julia-xyz.scm (julia-compat): New variable
---
 gnu/local.mk               |  1 +
 gnu/packages/julia-xyz.scm | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 gnu/packages/julia-xyz.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index fe8634b44d..e07229ee20 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -277,6 +277,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/jrnl.scm				\
   %D%/packages/jose.scm				\
   %D%/packages/julia.scm			\
+  %D%/packages/julia-xyz.scm			\
   %D%/packages/jupyter.scm			\
   %D%/packages/kawa.scm				\
   %D%/packages/kde.scm				\
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
new file mode 100644
index 0000000000..7d9faa63e9
--- /dev/null
+++ b/gnu/packages/julia-xyz.scm
@@ -0,0 +1,27 @@
+(define-module (gnu packages julia-xyz)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system julia))
+
+(define-public julia-compat
+  (package
+    (name "julia-compat")
+    (version "3.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/Compat.jl")
+             (commit (string-append "v" version))))
+       (file-name "Compat")
+       (sha256
+        (base32 "0d21h3l2ry2mmlhpg7b9cxifayzwcv7r13h5wydcbd5pjf6k4qd4"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/Compat.jl")
+    (synopsis "Compatibility across Julia versions")
+    (description "The Compat package is designed to ease interoperability
+between older and newer versions of the Julia language.  The Compat package
+provides a macro that lets you use the latest syntax in a backwards-compatible
+way.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-gnu-Add-julia-inifile.patch --]
[-- Type: text/x-patch, Size: 1463 bytes --]

From 9d6e97b3b87480fbc5f7dc32ad8e9db838e141ff Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:06:11 +0100
Subject: [PATCH 07/11] gnu: Add julia-inifile.

* gnu/packages/julia-xyz.scm (julia-inifile): New variable.
---
 gnu/packages/julia-xyz.scm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 7d9faa63e9..6b8053e5f8 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -25,3 +25,23 @@ between older and newer versions of the Julia language.  The Compat package
 provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
+
+(define-public julia-inifile
+  (package
+    (name "julia-inifile")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/IniFile.jl")
+             (commit "8ba59958495fa276d6489d2c3903e765d75e0bc0")))
+       (file-name "IniFile")
+       (sha256
+        (base32 "11h6f99jpbg729lplw841m68jprka7q3n8yw390bndlmcdsjabpd"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaIO/IniFile.jl")
+    (synopsis "Reading Windows-style INI files")
+    (description "This is a julia package that defines an IniFile type that
+allows to interface with @file{.ini} files")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-gnu-Add-julia-sha.patch --]
[-- Type: text/x-patch, Size: 1547 bytes --]

From bc96f48b6916eab179f7f1a911e54182e9c9ed71 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:07:13 +0100
Subject: [PATCH 08/11] gnu: Add julia-sha.

* gnu/packages/julia-xyz.scm (julia-sha): New variable.
---
 gnu/packages/julia-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 6b8053e5f8..92ffde58e7 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -45,3 +45,26 @@ way.")
     (description "This is a julia package that defines an IniFile type that
 allows to interface with @file{.ini} files")
     (license license:expat)))
+
+(define-public julia-sha
+  (package
+    (name "julia-sha")
+    (version "0.5.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/staticfloat/SHA.jl")
+             (commit (string-append "v" version))))
+       (file-name "SHA")
+       (sha256
+        (base32 "10a09kg9z0m8rvwmlgsna6p342kyvizx2axdqc6pzyhraddr8jrp"))))
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/staticfloat/SHA.jl")
+    (synopsis
+     "Performant, 100% native-julia SHA1, SHA2, and SHA3 implementation")
+    (description "Julia package implementing SHA algorithms.  Each exported
+function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
+@code{IO} object.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-gnu-Add-julia-binaryprovider.patch --]
[-- Type: text/x-patch, Size: 2121 bytes --]

From d1094a0e8346807904a96424d8c8c59c6a91bf40 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:07:36 +0100
Subject: [PATCH 09/11] gnu: Add julia-binaryprovider.

* gnu/packages/julia-xyz.scm (julia-binaryprovider): New variable.
---
 gnu/packages/julia-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 92ffde58e7..0f8e04b4d1 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,3 +68,36 @@ allows to interface with @file{.ini} files")
 function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
 @code{IO} object.")
     (license license:expat)))
+
+(define-public julia-binaryprovider
+  (package
+    (name "julia-binaryprovider")
+    (version "0.5.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaPackaging/BinaryProvider.jl")
+             (commit (string-append "v" version))))
+       (file-name "BinaryProvider")
+       (sha256
+        (base32 "174jmg4w8ncgfhdvfnm0p4cnlayw31j4s9sksqlwz1sipywqvww7"))))
+    (propagated-inputs `(("julia-sha" ,julia-sha)))
+    ;; We don't really need BinaryProvider (as guix provides the binaries) but
+    ;; since it's a dependency of other packages we want to precompile it.
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-engine-probe
+           (lambda _
+             (substitute* "src/BinaryProvider.jl"
+               ;; Precompilation tries to download things from the internet,
+               ;; disable the download part
+               (("probe_platform_engines") "# probe_platform_engines"))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaPackaging/BinaryProvider.jl")
+    (synopsis "Reliable Binary provider for Julia")
+    (description "@code{BinaryProvider.jl} simplifies the installation of
+binaries required by julia packages.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: 0010-gnu-Add-julia-mbedtls.patch --]
[-- Type: text/x-patch, Size: 3130 bytes --]

From 5239d2a1c3dc713496817eb0018a062af4b280be Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:11:14 +0100
Subject: [PATCH 10/11] gnu: Add julia-mbedtls.

* gnu/packages/julia-xyz.scm (julia-mbedtls): New variable.
---
 gnu/packages/julia-xyz.scm | 49 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 0f8e04b4d1..3e9f532697 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -2,7 +2,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix git-download)
-  #:use-module (guix build-system julia))
+  #:use-module (guix build-system julia)
+  #:use-module (gnu packages tls))
 
 (define-public julia-compat
   (package
@@ -101,3 +102,49 @@ function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
     (description "@code{BinaryProvider.jl} simplifies the installation of
 binaries required by julia packages.")
     (license license:expat)))
+
+(define-public julia-mbedtls
+  (package
+    (name "julia-mbedtls")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/MbedTLS.jl")
+             (commit (string-append "v" version))))
+       (file-name "MbedTLS")
+       (sha256
+        (base32 "1a8snw9gi21lm6r3kh6ly7ngi99s9k5shqkfiizj3g9li20q23h2"))))
+    (propagated-inputs
+     `(("julia-binaryprovider" ,julia-binaryprovider)
+       ("mbedtls-apache" ,mbedtls-apache)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'precompile 'build-deps
+           (lambda* (#:key outputs source inputs #:allow-other-keys)
+             (let ((f (open-file
+                       (string-append
+                        (assoc-ref outputs "out")
+                        "/share/julia/packages/"
+                        (string-append
+                         (strip-store-file-name source) "/deps/deps.jl"))
+                       "w")))
+               (display (string-append "const libmbedcrypto = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedcrypto.so\"\n") f)
+               (display (string-append "const libmbedtls = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedtls.so\"\n") f)
+               (display (string-append "const libmbedx509 = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedx509.so\"\n") f)
+               (close-port f))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/MbedTLS.jl")
+    (synopsis "Apache's mbed TLS library wrapper")
+    (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
+cryptography C libary for Julia.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: 0011-gnu-Add-julia-http.patch --]
[-- Type: text/x-patch, Size: 1557 bytes --]

From bd7ba60316819b1201966dc650f50e4c320a4dfd Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:11:45 +0100
Subject: [PATCH 11/11] gnu: Add julia-http.

* gnu/packages/julia-xyz.scm (julia-http): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 3e9f532697..ff1bb483f9 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -148,3 +148,27 @@ binaries required by julia packages.")
     (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
 cryptography C libary for Julia.")
     (license license:expat)))
+
+(define-public julia-http
+  (package
+    (name "julia-http")
+    (version "0.8.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaWeb/HTTP.jl")
+             (commit (string-append "v" version))))
+       (file-name "HTTP")
+       (sha256
+        (base32 "0928fvncfp07i5hvqxjyj8i27xmxxllas1m5idqq2i8h7jshzq3y"))))
+    (propagated-inputs
+     `(("julia-inifile" ,julia-inifile)
+       ("julia-mbedtls" ,julia-mbedtls)
+       ("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://juliaweb.github.io/HTTP.jl/")
+    (synopsis "HTTP support for Julia")
+    (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
+implementing both a client and a server.")
+    (license license:expat)))
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] Julia patches v3
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (18 preceding siblings ...)
  2020-01-18 13:59   ` [bug#38546] [00/11] Update Julia, Fix " Nicolò Balzarotti
@ 2020-01-18 14:35   ` Nicolò Balzarotti
  2020-02-11 17:58   ` [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done zimoun
  20 siblings, 0 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-18 14:35 UTC (permalink / raw)
  To: 38546

[-- Attachment #1: Type: text/plain, Size: 84 bytes --]


Sorry again, I fixed some unrelated changes that slipped in

Thanks, Nicolò


[-- Attachment #2: 0001-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 21849 bytes --]

From ae58a1dd7b24989e281b07d9a90e1bb6de5199e2 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 15:14:32 +0100
Subject: [PATCH 01/11] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1.
---
 gnu/packages/julia.scm | 281 +++++++++++++++++------------------------
 1 file changed, 115 insertions(+), 166 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..3455dc6239 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin (method url-fetch)
+	    (uri (julia-patch-url version name))
+	    (sha256 (base32 sha))
+	    (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; julia requires a patched version
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+	        (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/JuliaLang/libuv")))
 
 (define llvm-julia
   (package
@@ -99,39 +124,39 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
+	        (julia-patch "llvm-6.0-D44650"
 			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
+	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
 			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
+	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
 			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
+	        (julia-patch "llvm-6.0.0_D27296-libssp"
 			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
+	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
 			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
+	        (julia-patch "llvm-D34078-vectorize-fdiv"
 			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
+	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
 			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
+	        (julia-patch "llvm-D44892-Perf-integration"
 			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
+	        (julia-patch "llvm-D46460"
 			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
+	        (julia-patch "llvm-D49832-SCEVPred"
 			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
+	        (julia-patch "llvm-D50010-VNCoercion-ni"
 			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
+	        (julia-patch "llvm-D50167-scev-umin"
 			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
+	        (julia-patch "llvm-OProfile-line-num"
 			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
+	        (julia-patch "llvm-PPC-addrspaces"
 			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
+	        (julia-patch "llvm-rL323946-LSRTy"
 			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
+	        (julia-patch "llvm-rL326967-aligned-load"
 			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
+	        (julia-patch "llvm-rL327898"
 			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
@@ -158,7 +183,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +191,7 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +213,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +252,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +265,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,43 +283,34 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",
+                                          \"stacktraces\",\"stress\",\"precompile\"]),
+                                testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
-        (string-append "PREFIX=" (assoc-ref %outputs "out"))
 
         ;; Passing the MARCH flag is necessary to build binary substitutes for
         ;; the supported architectures.
@@ -345,26 +323,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +358,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +379,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +394,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +424,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-julia-use-SOURCE_DATE_EPOCH-for-precompilation-t.patch --]
[-- Type: text/x-patch, Size: 3117 bytes --]

From f849311d8b97688966d5e6d93d856c7c50d9eab2 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 13:58:37 +0100
Subject: [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation
 timestamp

* gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch: new file
---
 gnu/local.mk                                  |  1 +
 gnu/packages/julia.scm                        |  4 ++-
 ...ia-fake-mtime-with-SOURCE_DATE_EPOCH.patch | 29 +++++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 00ff3b8d61..fe8634b44d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1010,6 +1010,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch      \
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 3455dc6239..156dc722f9 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -191,7 +191,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
new file mode 100644
index 0000000000..467e6d68d1
--- /dev/null
+++ b/gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch
@@ -0,0 +1,29 @@
+From e4dc28db1d70819505fd1a68fd9d2bfc4fb61a7d Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@nixo.xyz>
+Date: Fri, 17 Jan 2020 11:28:30 +0100
+Subject: [PATCH] base: loading: support fake mtime with SOURCE_DATE_EPCOCH
+
+Do this when loading libraries
+---
+ base/loading.jl | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/base/loading.jl b/base/loading.jl
+index 7f11a2d4fc..1b4686d1dc 100644
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@ function _include_dependency(mod::Module, _path::AbstractString)
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++        push!(_require_dependencies,
++              (mod, path,
++               haskey(ENV, "SOURCE_DATE_EPOCH") ?
++               parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
+-- 
+2.24.1
+
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-julia-Adjust-indentation.patch --]
[-- Type: text/x-patch, Size: 16196 bytes --]

From 5d453dbdc1939a4a334730bab55d20c48a8afcf0 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Fri, 10 Jan 2020 10:25:49 +0100
Subject: [PATCH 03/11] gnu: julia: Adjust indentation.

* gnu/packages/julia.scm (julia): Correct indentation, untabify
---
 gnu/packages/julia.scm | 216 ++++++++++++++++++++---------------------
 1 file changed, 108 insertions(+), 108 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 156dc722f9..40924b0ced 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -51,14 +51,14 @@
 
 (define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name ".patch"))
+                 "/deps/patches/" name ".patch"))
 
 (define (julia-patch name sha)
   (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (julia-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+            (uri (julia-patch-url version name))
+            (sha256 (base32 sha))
+            (file-name name))))
 
 (define libuv-julia
   (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
@@ -101,7 +101,7 @@
                 "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
               (patches
                (list
-	        (julia-patch "libunwind-prefer-extbl"
+                (julia-patch "libunwind-prefer-extbl"
                              "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
                 (julia-patch "libunwind-static-arm"
                              "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
@@ -124,45 +124,45 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (julia-patch "llvm-6.0-D44650"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (julia-patch "llvm-6.0.0_D27296-libssp"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (julia-patch "llvm-D34078-vectorize-fdiv"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (julia-patch "llvm-D44892-Perf-integration"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (julia-patch "llvm-D46460"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (julia-patch "llvm-D49832-SCEVPred"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (julia-patch "llvm-D50010-VNCoercion-ni"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (julia-patch "llvm-D50167-scev-umin"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (julia-patch "llvm-OProfile-line-num"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (julia-patch "llvm-PPC-addrspaces"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (julia-patch "llvm-rL323946-LSRTy"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (julia-patch "llvm-rL326967-aligned-load"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (julia-patch "llvm-rL327898"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+                (julia-patch "llvm-6.0-D44650"
+                            "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
+                            "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                (julia-patch "llvm-6.0-NVPTX-addrspaces"
+                            "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                (julia-patch "llvm-6.0.0_D27296-libssp"
+                            "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
+                            "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                (julia-patch "llvm-D34078-vectorize-fdiv"
+                            "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                (julia-patch "llvm-D42262-jumpthreading-not-i1"
+                            "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                (julia-patch "llvm-D44892-Perf-integration"
+                            "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                (julia-patch "llvm-D46460"
+                            "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                (julia-patch "llvm-D49832-SCEVPred"
+                            "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                (julia-patch "llvm-D50010-VNCoercion-ni"
+                            "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                (julia-patch "llvm-D50167-scev-umin"
+                            "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                (julia-patch "llvm-OProfile-line-num"
+                            "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                (julia-patch "llvm-PPC-addrspaces"
+                            "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                (julia-patch "llvm-rL323946-LSRTy"
+                            "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                (julia-patch "llvm-rL326967-aligned-load"
+                            "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                (julia-patch "llvm-rL327898"
+                            "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
         `(list ;; Taken from NixOS. Only way I could get libLLVM-6.0.so
-	  "-DCMAKE_BUILD_TYPE=Release"
+          "-DCMAKE_BUILD_TYPE=Release"
 
           ;; Build a native compiler and the NVPTX backend (NVIDIA) since
           ;; Julia insists on it, nothing more.  This reduces build times and
@@ -170,15 +170,15 @@
           ,(string-append "-DLLVM_TARGETS_TO_BUILD=" (system->llvm-target))
           "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=NVPTX"
 
-	  "-DLLVM_INSTALL_UTILS=ON"
-	  "-DLLVM_BUILD_TESTS=ON"
-	  "-DLLVM_ENABLE_FFI=ON"
-	  "-DLLVM_ENABLE_RTTI=ON"
+          "-DLLVM_INSTALL_UTILS=ON"
+          "-DLLVM_BUILD_TESTS=ON"
+          "-DLLVM_ENABLE_FFI=ON"
+          "-DLLVM_ENABLE_RTTI=ON"
           ;; "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
           ;; "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
-	  ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
-	  "-DLLVM_ENABLE_DUMP=ON"
-	  "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
+          ;; "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly"
+          "-DLLVM_ENABLE_DUMP=ON"
+          "-DLLVM_LINK_LLVM_DYLIB=ON"))))))
 
 (define-public julia
   (package
@@ -222,9 +222,9 @@
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-	     ;; needed by libwhich
-	     (setenv "LD_LIBRARY_PATH"
-		     (string-join (map (lambda (pkg)
+             ;; needed by libwhich
+             (setenv "LD_LIBRARY_PATH"
+                     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
                                        '("arpack-ng" "curl" "dsfmt"
@@ -234,7 +234,7 @@
                                          "openblas" "openlibm" "pcre2"
                                          "suitesparse"))
                                   ":"))
-	     #t))
+             #t))
          ;; FIXME: Building the documentation requires Julia packages that
          ;; would be downloaded from the Internet.  We should build them in a
          ;; separate build phase.
@@ -250,40 +250,40 @@
            ;; Some tests require a home directory to be set.
            (lambda _ (setenv "HOME" "/tmp") #t))
          (add-after 'unpack 'hardcode-soname-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)
-            (substitute* "base/math.jl"
-              (("const libm = Base.libm_name")
-               (string-append "const libm = \""
-                              (assoc-ref inputs "openlibm")
-                              "/lib/libopenlibm.so"
-                              "\"")))))
+           ;; ./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)
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
-          (lambda* (#:key inputs #:allow-other-keys)
-            ;; LIBUTF8PROC is a linker flag, not a build target.  It is
-            ;; included in the LIBFILES_* variable which is used as a
-            ;; collection of build targets and a list of libraries to link
-            ;; against.
-            (substitute* "src/flisp/Makefile"
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
+             ;; included in the LIBFILES_* variable which is used as a
+             ;; collection of build targets and a list of libraries to link
+             ;; against.
+             (substitute* "src/flisp/Makefile"
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
                 "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
                (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
                 "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
-            ;; The REPL must be linked with libuv.
-            (substitute* "ui/Makefile"
-              (("JLDFLAGS \\+= ")
-               (string-append "JLDFLAGS += "
-                              (assoc-ref %build-inputs "libuv")
-                              "/lib/libuv.so ")))
+             ;; The REPL must be linked with libuv.
+             (substitute* "ui/Makefile"
+               (("JLDFLAGS \\+= ")
+                (string-append "JLDFLAGS += "
+                               (assoc-ref %build-inputs "libuv")
+                               "/lib/libuv.so ")))
 
-            (substitute* "base/Makefile"
-              (("\\$\\(build_includedir\\)/uv/errno.h")
-               (string-append (assoc-ref inputs "libuv")
-                              "/include/uv/errno.h")))
-            #t))
+             (substitute* "base/Makefile"
+               (("\\$\\(build_includedir\\)/uv/errno.h")
+                (string-append (assoc-ref inputs "libuv")
+                               "/include/uv/errno.h")))
+             #t))
          (add-before 'build 'replace-default-shell
            (lambda _
              (substitute* "base/client.jl"
@@ -309,7 +309,7 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-	     #t)))
+             #t)))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -332,7 +332,7 @@
         "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
-        "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
+        "USE_BLAS64=0"                  ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
@@ -340,35 +340,35 @@
         (string-append "SUITESPARSE_INC=-I "
                        (assoc-ref %build-inputs "suitesparse")
                        "/include")
-        "USE_GPL_LIBS=1"        ;proudly
+        "USE_GPL_LIBS=1"                ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
                        (assoc-ref %build-inputs "utf8proc")
                        "/include")
         "USE_SYSTEM_LLVM=1"
-	"LLVM_VER=6.0.1"
+        "LLVM_VER=6.0.1"
 
-	"USE_LLVM_SHLIB=1"
-	"USE_SYSTEM_LIBUNWIND=1"
-	"USE_SYSTEM_LIBUV=1"
-	(string-append "LIBUV="
-		       (assoc-ref %build-inputs "libuv")
-		       "/lib/libuv.so")
-	(string-append "LIBUV_INC="
-		       (assoc-ref %build-inputs "libuv")
-		       "/include")
-	"USE_SYSTEM_PATCHELF=1"
-	"USE_SYSTEM_PCRE=1"
-	"USE_SYSTEM_OPENLIBM=1"
+        "USE_LLVM_SHLIB=1"
+        "USE_SYSTEM_LIBUNWIND=1"
+        "USE_SYSTEM_LIBUV=1"
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_PATCHELF=1"
+        "USE_SYSTEM_PCRE=1"
+        "USE_SYSTEM_OPENLIBM=1"
         "USE_SYSTEM_LIBM=0"
         "USE_SYSTEM_LIBSSH2=1"
         "USE_SYSTEM_CURL=1"
-	"USE_SYSTEM_GMP=1"
-	"USE_SYSTEM_MPFR=1"
-	"USE_SYSTEM_MBEDTLS=1"
-	"USE_SYSTEM_ARPACK=1"
-	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1")))
+        "USE_SYSTEM_GMP=1"
+        "USE_SYSTEM_MPFR=1"
+        "USE_SYSTEM_MBEDTLS=1"
+        "USE_SYSTEM_ARPACK=1"
+        "USE_SYSTEM_LIBGIT2=1"
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
@@ -378,9 +378,9 @@
        ;; <https://bugs.gnu.org/30282>.
        ("arpack-ng" ,arpack-ng-3.3.0)
 
-       ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
+       ("coreutils" ,coreutils)         ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
-       ("openblas" ,openblas) ;Julia does not build with Atlas
+       ("openblas" ,openblas)           ;Julia does not build with Atlas
        ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
        ("mbedtls" ,mbedtls-apache)
@@ -412,20 +412,20 @@
             (base32
              "0wp6ld9vk11f4nnkn56627zmlv9k5vafi99qa3yyn1pgcd61zcfs"))))
        ("libwhich"
-	,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
+        ,(let ((commit "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"))
            (origin
              ;; Note: We use a /tarball URL, but that's because Julia's build
              ;; system checks the hash of that tarball; thus we can't use
              ;; 'git-fetch'.
-	     (method url-fetch)
-	     (uri (string-append
+             (method url-fetch)
+             (uri (string-append
                    "https://api.github.com/repos/vtjnash/libwhich/tarball/"
                    commit))
              (file-name (string-append "libwhich-" (string-take commit 7)
                                        ".tar.gz"))
-	     (sha256
-	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+             (sha256
+              (base32
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
        ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #5: 0004-gnu-julia-use-wrapper-to-set-JULIA_LOAD_PATH-and-JUL.patch --]
[-- Type: text/x-patch, Size: 2005 bytes --]

From a14f7c993da9ead8b497de94c112f0a3ec93ef6c Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:23:44 +0100
Subject: [PATCH 04/11] gnu: julia: use wrapper to set JULIA_LOAD_PATH and
 JULIA_DEPOT_PATH

---
 gnu/packages/julia.scm | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 40924b0ced..39c7d6d34f 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -309,7 +309,20 @@
              ;; https://github.com/JuliaLang/julia/issues/32377
              (substitute* "stdlib/REPL/test/replcompletions.jl"
                (("@test count") "@test_broken count"))
-             #t)))
+             #t))
+         (add-after 'install 'make-wrapper
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (program "julia"))
+               (with-directory-excursion bin
+                 (wrap-program program
+                   `("JULIA_LOAD_PATH" ":" prefix
+                     ("" "$JULIA_LOAD_PATH")))
+                 (wrap-program program
+                   `("JULIA_DEPOT_PATH" ":" prefix
+                     ("" "$JULIA_DEPOT_PATH"))))
+               #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -436,7 +449,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
-- 
2.24.1


[-- Attachment #6: 0005-gnu-build-julia-build-system-fix-package-precompilat.patch --]
[-- Type: text/x-patch, Size: 4401 bytes --]

From fe7101742199677293cdbbd34be8992c95f7bd8c Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Fri, 17 Jan 2020 19:40:55 +0100
Subject: [PATCH 05/11] gnu: build: julia-build-system: fix package
 precompilation

---
 guix/build/julia-build-system.scm | 51 +++++++++++++------------------
 1 file changed, 22 insertions(+), 29 deletions(-)

diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index ff6fcf5fe3..dbd4af623d 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2019, 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,53 +37,46 @@
 ;; subpath where we store the package content
 (define %package-path "/share/julia/packages/")
 
-(define (generate-load-path inputs outputs)
-  (string-append
-   (string-join (map (match-lambda
-                       ((_ . path)
-                        (string-append path %package-path)))
-                     ;; Restrict to inputs beginning with "julia-".
-                     (filter (match-lambda
-                               ((name . _)
-                                (string-prefix? "julia-" name)))
-                             inputs))
-                ":")
-   (string-append ":" (assoc-ref outputs "out") %package-path)
-   ;; stdlib is always required to find Julia's standard libraries.
-   ;; usually there are other two paths in this variable:
-   ;; "@" and "@v#.#"
-   ":@stdlib"))
-
 (define* (install #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package-dir (string-append out %package-path
-                                     (string-append
-                                      (strip-store-file-name source)))))
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+                                     (strip-store-file-name source))))
     (mkdir-p package-dir)
-    (copy-recursively source package-dir))
+    (copy-recursively (getcwd) package-dir))
   #t)
 
-;; TODO: Precompilation is working, but I don't know how to tell
-;; julia to use use it. If (on rantime) we set HOME to
-;; store path, julia tries to write files there (failing)
 (define* (precompile #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (builddir (string-append out "/share/julia/"))
          (package (strip-store-file-name source)))
     (mkdir-p builddir)
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    ;; Actual precompilation
-    (invoke-julia (string-append "using " package)))
+    ;; add new package dir to the load path
+    (setenv "JULIA_LOAD_PATH"
+            (string-append builddir "packages/" ":"
+                           (or (getenv "JULIA_LOAD_PATH")
+                               "")))
+    ;; Actual precompilation.
+    (invoke-julia
+     ;; when using julia as a user, julia writes precompile cache to the first
+     ;; entry of the DEPOT_PATH list (by default, the home dir).  We want to
+     ;; write it to the store, so let's push the store path as the first
+     ;; element of DEPOT_PATH.  Once the cache file exists, this hack is not
+     ;; needed anymore (like in the check phase).  If the user install new
+     ;; pacakges, those will be installed and precompiled in the home dir
+     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using " package)))
   #t)
 
 (define* (check #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package (strip-store-file-name source))
          (builddir (string-append out "/share/julia/")))
+    ;; With a patch, SOURCE_DATE_EPOCH is honored
+    (setenv "SOURCE_DATE_EPOCH" "1")
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+    (setenv "JULIA_LOAD_PATH" (string-append builddir "packages/"))
     (invoke-julia (string-append "using Pkg;Pkg.test(\"" package "\")")))
   #t)
 
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-gnu-Add-julia-compat.patch --]
[-- Type: text/x-patch, Size: 2072 bytes --]

From 607383a2523efd85f8ec454c31fee8fb68b38249 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:05:00 +0100
Subject: [PATCH 06/11] gnu: Add julia-compat.

* gnu/packages/julia-xyz.scm: New file
* gnu/packages/julia-xyz.scm (julia-compat): New variable
---
 gnu/local.mk               |  1 +
 gnu/packages/julia-xyz.scm | 27 +++++++++++++++++++++++++++
 2 files changed, 28 insertions(+)
 create mode 100644 gnu/packages/julia-xyz.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index fe8634b44d..e07229ee20 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -277,6 +277,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/jrnl.scm				\
   %D%/packages/jose.scm				\
   %D%/packages/julia.scm			\
+  %D%/packages/julia-xyz.scm			\
   %D%/packages/jupyter.scm			\
   %D%/packages/kawa.scm				\
   %D%/packages/kde.scm				\
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
new file mode 100644
index 0000000000..7d9faa63e9
--- /dev/null
+++ b/gnu/packages/julia-xyz.scm
@@ -0,0 +1,27 @@
+(define-module (gnu packages julia-xyz)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system julia))
+
+(define-public julia-compat
+  (package
+    (name "julia-compat")
+    (version "3.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/Compat.jl")
+             (commit (string-append "v" version))))
+       (file-name "Compat")
+       (sha256
+        (base32 "0d21h3l2ry2mmlhpg7b9cxifayzwcv7r13h5wydcbd5pjf6k4qd4"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/Compat.jl")
+    (synopsis "Compatibility across Julia versions")
+    (description "The Compat package is designed to ease interoperability
+between older and newer versions of the Julia language.  The Compat package
+provides a macro that lets you use the latest syntax in a backwards-compatible
+way.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-gnu-Add-julia-inifile.patch --]
[-- Type: text/x-patch, Size: 1463 bytes --]

From c503ef2c5421939ed28a7f6a676c9c70f812d3fb Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:06:11 +0100
Subject: [PATCH 07/11] gnu: Add julia-inifile.

* gnu/packages/julia-xyz.scm (julia-inifile): New variable.
---
 gnu/packages/julia-xyz.scm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 7d9faa63e9..6b8053e5f8 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -25,3 +25,23 @@ between older and newer versions of the Julia language.  The Compat package
 provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
+
+(define-public julia-inifile
+  (package
+    (name "julia-inifile")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/IniFile.jl")
+             (commit "8ba59958495fa276d6489d2c3903e765d75e0bc0")))
+       (file-name "IniFile")
+       (sha256
+        (base32 "11h6f99jpbg729lplw841m68jprka7q3n8yw390bndlmcdsjabpd"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaIO/IniFile.jl")
+    (synopsis "Reading Windows-style INI files")
+    (description "This is a julia package that defines an IniFile type that
+allows to interface with @file{.ini} files")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-gnu-Add-julia-sha.patch --]
[-- Type: text/x-patch, Size: 1547 bytes --]

From a2ff2e6f01b022972205d4efd47cf06e9ec1899b Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:07:13 +0100
Subject: [PATCH 08/11] gnu: Add julia-sha.

* gnu/packages/julia-xyz.scm (julia-sha): New variable.
---
 gnu/packages/julia-xyz.scm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 6b8053e5f8..92ffde58e7 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -45,3 +45,26 @@ way.")
     (description "This is a julia package that defines an IniFile type that
 allows to interface with @file{.ini} files")
     (license license:expat)))
+
+(define-public julia-sha
+  (package
+    (name "julia-sha")
+    (version "0.5.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/staticfloat/SHA.jl")
+             (commit (string-append "v" version))))
+       (file-name "SHA")
+       (sha256
+        (base32 "10a09kg9z0m8rvwmlgsna6p342kyvizx2axdqc6pzyhraddr8jrp"))))
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://github.com/staticfloat/SHA.jl")
+    (synopsis
+     "Performant, 100% native-julia SHA1, SHA2, and SHA3 implementation")
+    (description "Julia package implementing SHA algorithms.  Each exported
+function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
+@code{IO} object.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-gnu-Add-julia-binaryprovider.patch --]
[-- Type: text/x-patch, Size: 2121 bytes --]

From 189ca6851f5f57ce09e65c81e9b8f50ba0008a80 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:07:36 +0100
Subject: [PATCH 09/11] gnu: Add julia-binaryprovider.

* gnu/packages/julia-xyz.scm (julia-binaryprovider): New variable.
---
 gnu/packages/julia-xyz.scm | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 92ffde58e7..0f8e04b4d1 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,3 +68,36 @@ allows to interface with @file{.ini} files")
 function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
 @code{IO} object.")
     (license license:expat)))
+
+(define-public julia-binaryprovider
+  (package
+    (name "julia-binaryprovider")
+    (version "0.5.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaPackaging/BinaryProvider.jl")
+             (commit (string-append "v" version))))
+       (file-name "BinaryProvider")
+       (sha256
+        (base32 "174jmg4w8ncgfhdvfnm0p4cnlayw31j4s9sksqlwz1sipywqvww7"))))
+    (propagated-inputs `(("julia-sha" ,julia-sha)))
+    ;; We don't really need BinaryProvider (as guix provides the binaries) but
+    ;; since it's a dependency of other packages we want to precompile it.
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-engine-probe
+           (lambda _
+             (substitute* "src/BinaryProvider.jl"
+               ;; Precompilation tries to download things from the internet,
+               ;; disable the download part
+               (("probe_platform_engines") "# probe_platform_engines"))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaPackaging/BinaryProvider.jl")
+    (synopsis "Reliable Binary provider for Julia")
+    (description "@code{BinaryProvider.jl} simplifies the installation of
+binaries required by julia packages.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: 0010-gnu-Add-julia-mbedtls.patch --]
[-- Type: text/x-patch, Size: 3130 bytes --]

From 87b37b3f041709a1926f441a9643b723ca2ef8a1 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:11:14 +0100
Subject: [PATCH 10/11] gnu: Add julia-mbedtls.

* gnu/packages/julia-xyz.scm (julia-mbedtls): New variable.
---
 gnu/packages/julia-xyz.scm | 49 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 48 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 0f8e04b4d1..3e9f532697 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -2,7 +2,8 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix git-download)
-  #:use-module (guix build-system julia))
+  #:use-module (guix build-system julia)
+  #:use-module (gnu packages tls))
 
 (define-public julia-compat
   (package
@@ -101,3 +102,49 @@ function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
     (description "@code{BinaryProvider.jl} simplifies the installation of
 binaries required by julia packages.")
     (license license:expat)))
+
+(define-public julia-mbedtls
+  (package
+    (name "julia-mbedtls")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/MbedTLS.jl")
+             (commit (string-append "v" version))))
+       (file-name "MbedTLS")
+       (sha256
+        (base32 "1a8snw9gi21lm6r3kh6ly7ngi99s9k5shqkfiizj3g9li20q23h2"))))
+    (propagated-inputs
+     `(("julia-binaryprovider" ,julia-binaryprovider)
+       ("mbedtls-apache" ,mbedtls-apache)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'precompile 'build-deps
+           (lambda* (#:key outputs source inputs #:allow-other-keys)
+             (let ((f (open-file
+                       (string-append
+                        (assoc-ref outputs "out")
+                        "/share/julia/packages/"
+                        (string-append
+                         (strip-store-file-name source) "/deps/deps.jl"))
+                       "w")))
+               (display (string-append "const libmbedcrypto = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedcrypto.so\"\n") f)
+               (display (string-append "const libmbedtls = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedtls.so\"\n") f)
+               (display (string-append "const libmbedx509 = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedx509.so\"\n") f)
+               (close-port f))
+             #t)))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/MbedTLS.jl")
+    (synopsis "Apache's mbed TLS library wrapper")
+    (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
+cryptography C libary for Julia.")
+    (license license:expat)))
-- 
2.24.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: 0011-gnu-Add-julia-http.patch --]
[-- Type: text/x-patch, Size: 1557 bytes --]

From 488857fdd17d1cb8d479dd18b367b33cb449cd22 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 14:11:45 +0100
Subject: [PATCH 11/11] gnu: Add julia-http.

* gnu/packages/julia-xyz.scm (julia-http): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 3e9f532697..ff1bb483f9 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -148,3 +148,27 @@ binaries required by julia packages.")
     (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
 cryptography C libary for Julia.")
     (license license:expat)))
+
+(define-public julia-http
+  (package
+    (name "julia-http")
+    (version "0.8.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaWeb/HTTP.jl")
+             (commit (string-append "v" version))))
+       (file-name "HTTP")
+       (sha256
+        (base32 "0928fvncfp07i5hvqxjyj8i27xmxxllas1m5idqq2i8h7jshzq3y"))))
+    (propagated-inputs
+     `(("julia-inifile" ,julia-inifile)
+       ("julia-mbedtls" ,julia-mbedtls)
+       ("julia-compat" ,julia-compat)))
+    (build-system julia-build-system)
+    (home-page "https://juliaweb.github.io/HTTP.jl/")
+    (synopsis "HTTP support for Julia")
+    (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
+implementing both a client and a server.")
+    (license license:expat)))
-- 
2.24.1


^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-18 13:59   ` [bug#38546] [00/11] Update Julia, Fix " Nicolò Balzarotti
@ 2020-01-20 18:49     ` zimoun
  2020-01-21 13:45       ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-01-20 18:49 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicolò,

Thank you for working on this.
Julia rocks! ;-)


However, I am lost with your patch set.

I have tried only the first patch you attached. I hit this error:

--8<---------------cut here---------------start------------->8---
error: dsfmt: unbound variable
--8<---------------cut here---------------end--------------->8---

So something is missing. :-)

Then I notice that you change the list of 'patches' and you "forgot"
to send them too. :-)


Almost related, does this update fix the reproducibility bug [1]? For example,

--8<---------------cut here---------------start------------->8---
./pre-inst-env guix build julia
./pre-inst-env guix build julia --check --no-grafts -K
--8<---------------cut here---------------end--------------->8---


[1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22304


All the best,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-20 18:49     ` zimoun
@ 2020-01-21 13:45       ` Nicolò Balzarotti
  2020-01-22  9:22         ` zimoun
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-21 13:45 UTC (permalink / raw)
  To: zimoun; +Cc: Ludovic Courtès, 38546

[-- Attachment #1: Type: text/plain, Size: 2268 bytes --]

Hi Simon,

Sorry, I forgot to send the dsfmt patch.  Also, julia's
SOURCE_DATE_EPOCH patch was named differently. I've fixed this in theattached patches.  You need to apply Add-dsfmt.patch, Update-to-1.3.1
and then julia-use-SOURCE_DATE_EPOCH.

About reproducibility: if I'm not wrong, sys.so contains Base library
precompiled ([1]).  Precompilation is still non deterministic (here's
[2] an issue on github). Something I did to check precompilation:

Since I'm tired of this, I've started investigating better.

Loaded a guix container
#+begin_src bash
mkdir -p /tmp/jlprecompiled/
./pre-inst-env guix environment -u nixbld --no-cwd --container --network --expose=$(realpath determinism) --share=/tmp/jlprecompiled/ --ad-hoc julia coreutils nss-certs curl tar gzip libfaketime
#+end_src

from this container, run some time this:

#+begin_src bash
export SSL_CERT_DIR="$GUIX_ENVIRONMENT/etc/ssl/certs"
export SSL_CERT_FILE="$SSL_CERT_DIR/ca-certificates.crt"
export GIT_SSL_CAINFO="$SSL_CERT_FILE"

SOURCE_DATE_EPOCH=1 julia --startup-file=no -q -e 'using Pkg; Pkg.instantiate()'
SOURCE_DATE_EPOCH=1 faketime '2008-12-24 08:15:42' julia --startup-file=no -q -e 'using Random; using Pkg; Pkg.add("Compat"); Random.seed!(0); using Compat'

cp -r ~/.julia/compiled/v1.3/Compat/ /tmp/jlprecompiled/$RANDOM
sha256sum ~/.julia/compiled/v1.3/Compat/*
# 6c10d65f6cd9cdd5b98e4d5e2b82b7bd00508f0daccef0967dec92cb6468052e  /home/nixbld/.julia/compiled/v1.3/Compat/GSFWK_Pua4I.ji
ls -lah ~/.julia/compiled/v1.3/Compat/*
# -rw------- 1 nixbld users 102K Jan 21 07:39 /home/nixbld/.julia/compiled/v1.3/Compat/GSFWK_Pua4I.ji
#+end_src

I could not get the same results twice (also, size differs).  I'll work
on this on some spare time (for example, there are other places where
SOURCE_DATE_EPOCH can be used, but this [3] is a problem I need to
solve first).

Maybe 1.3.1 (when reviewed) can be merged, since we have
the same problem with julia 1.1, but we can wait for the
source-date-epoch and julia-xyz patches until we solve this.

What do you think?

Thanks, Nicolò

[1] https://docs.julialang.org/en/v1/devdocs/sysimg/
[2] https://github.com/JuliaLang/julia/issues/25900
[3] https://github.com/JuliaLang/julia/issues/34115


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-dsfmt.patch --]
[-- Type: text/x-patch, Size: 3796 bytes --]

From 337ddd64ce4f3a00f33a90496822500dc6df2010 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 28 Dec 2019 00:10:48 +0100
Subject: [PATCH] gnu: Add dsfmt.

* gnu/packages/maths.scm (dsfmt): New variable.
---
 gnu/packages/maths.scm | 63 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 8364d528fd..1d35d880bd 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -372,6 +372,69 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dsfmt
+  (package
+    (name "dsfmt")
+    (version "2.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append
+                "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-"
+                version ".tar.gz"))
+              (sha256
+               (base32
+                "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))
+              ;; julia needs those (and is the only program depending on dsfmt now)
+              (patches
+               (list
+                (origin (method url-fetch)
+                        (uri
+                         "https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/patches/dSFMT.c.patch")
+                        (sha256 (base32 "09mhv11bms8jsmkmdqvlcgljwhzw3b6n9nncpi2b6dla9798hw2y"))
+                        (file-name "dSFMT.c.patch"))
+                (origin (method url-fetch)
+                        (uri
+                         "https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/patches/dSFMT.h.patch")
+                        (sha256 (base32 "1py5rd0yxic335lzka23f6x2dhncrpizpyrk57gi2f28c0p98y5n"))
+                        (file-name "dSFMT.h.patch"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'build
+           ;; upstream Makefile does not build a shared library
+           (lambda _
+             (invoke
+              "gcc"
+              ;; flags copied from julia
+              ;; https://github.com/JuliaLang/julia/blob/v1.3.0/deps/dsfmt.mk
+              "-DNDEBUG" "-DDSFMT_MEXP=19937"
+              "-fPIC" "-DDSFMT_DO_NOT_USE_OLD_NAMES"
+              "-O3" "-finline-functions" "-fomit-frame-pointer"
+              "-fno-strict-aliasing" "--param" "max-inline-insns-single=1800"
+              "-Wmissing-prototypes" "-Wall" "-std=c99" "-shared" "dSFMT.c"
+              "-o" "libdSFMT.so")))
+         (replace 'install              ;no "install" target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((lib (string-append (assoc-ref outputs "out")
+                                       "/lib"))
+                   (inc (string-append (assoc-ref outputs "out")
+                                       "/include")))
+               (install-file "libdSFMT.so" lib)
+               (install-file "dSFMT.h" inc)
+               #t))))))
+    (synopsis "Double precision SIMD-oriented Fast Mersenne Twister")
+    (description "Speed up Fast Mersenne Twister generation by avoiding the
+expensive conversion of integer to double (floating point). dSFMT directly
+generates double precision floating point pseudorandom numbers which have the
+IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
+format. dSFMT is only available on the CPUs which use IEEE 754 format double
+precision floating point numbers.")
+    (home-page "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/")
+    (license license:bsd-3)))
+
 (define-public gsl
   (package
     (name "gsl")
-- 
2.25.0


[-- Attachment #3: 0001-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 21843 bytes --]

From ae58a1dd7b24989e281b07d9a90e1bb6de5199e2 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 15:14:32 +0100
Subject: [PATCH] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1.
---
 gnu/packages/julia.scm | 281 +++++++++++++++++------------------------
 1 file changed, 115 insertions(+), 166 deletions(-)

diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..3455dc6239 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin (method url-fetch)
+	    (uri (julia-patch-url version name))
+	    (sha256 (base32 sha))
+	    (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; julia requires a patched version
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+	        (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (build-system gnu-build-system)
+    (home-page "https://github.com/JuliaLang/libuv")))
 
 (define llvm-julia
   (package
@@ -99,39 +124,39 @@
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
                (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
+	        (julia-patch "llvm-6.0-D44650"
 			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
+	        (julia-patch "llvm-6.0-DISABLE_ABI_CHECKS"
 			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
+	        (julia-patch "llvm-6.0-NVPTX-addrspaces"
 			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
+	        (julia-patch "llvm-6.0.0_D27296-libssp"
 			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
+	        (julia-patch "llvm-D27629-AArch64-large_model_6.0.1"
 			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
+	        (julia-patch "llvm-D34078-vectorize-fdiv"
 			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
+	        (julia-patch "llvm-D42262-jumpthreading-not-i1"
 			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
+	        (julia-patch "llvm-D44892-Perf-integration"
 			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
+	        (julia-patch "llvm-D46460"
 			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
+	        (julia-patch "llvm-D49832-SCEVPred"
 			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
+	        (julia-patch "llvm-D50010-VNCoercion-ni"
 			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
+	        (julia-patch "llvm-D50167-scev-umin"
 			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
+	        (julia-patch "llvm-OProfile-line-num"
 			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
+	        (julia-patch "llvm-PPC-addrspaces"
 			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
+	        (julia-patch "llvm-rL323946-LSRTy"
 			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
+	        (julia-patch "llvm-rL326967-aligned-load"
 			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
+	        (julia-patch "llvm-rL327898"
 			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
@@ -158,7 +183,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +191,7 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +213,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +252,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +265,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,43 +283,34 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",
+                                          \"stacktraces\",\"stress\",\"precompile\"]),
+                                testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
-        (string-append "PREFIX=" (assoc-ref %outputs "out"))
 
         ;; Passing the MARCH flag is necessary to build binary substitutes for
         ;; the supported architectures.
@@ -345,26 +323,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +358,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +379,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +394,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +424,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0001-gnu-julia-use-SOURCE_DATE_EPOCH-for-precompilation-t.patch --]
[-- Type: text/x-patch, Size: 3061 bytes --]

From f33153f5f185562d01cfbfbfed43732483132f84 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 18 Jan 2020 13:58:37 +0100
Subject: [PATCH] gnu: julia: use SOURCE_DATE_EPOCH for precompilation
 timestamp

* gnu/packages/patches/julia-fake-mtime-with-SOURCE_DATE_EPOCH.patch: new file
---
 gnu/local.mk                                  |  1 +
 gnu/packages/julia.scm                        |  4 ++-
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       | 29 +++++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 00ff3b8d61..fe8634b44d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1010,6 +1010,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch      \
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 3455dc6239..794980c12f 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -191,7 +191,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
new file mode 100644
index 0000000000..467e6d68d1
--- /dev/null
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -0,0 +1,29 @@
+From e4dc28db1d70819505fd1a68fd9d2bfc4fb61a7d Mon Sep 17 00:00:00 2001
+From: nixo <nicolo@nixo.xyz>
+Date: Fri, 17 Jan 2020 11:28:30 +0100
+Subject: [PATCH] base: loading: support fake mtime with SOURCE_DATE_EPCOCH
+
+Do this when loading libraries
+---
+ base/loading.jl | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/base/loading.jl b/base/loading.jl
+index 7f11a2d4fc..1b4686d1dc 100644
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@ function _include_dependency(mod::Module, _path::AbstractString)
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++        push!(_require_dependencies,
++              (mod, path,
++               haskey(ENV, "SOURCE_DATE_EPOCH") ?
++               parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
+-- 
+2.24.1
+
-- 
2.25.0


[-- Attachment #5: Type: text/plain, Size: 971 bytes --]



zimoun <zimon.toutoune@gmail.com> writes:

> Hi Nicolò,
>
> Thank you for working on this.
> Julia rocks! ;-)
>
>
> However, I am lost with your patch set.
>
> I have tried only the first patch you attached. I hit this error:
>
> --8<---------------cut here---------------start------------->8---
> error: dsfmt: unbound variable
> --8<---------------cut here---------------end--------------->8---
>
> So something is missing. :-)
>
> Then I notice that you change the list of 'patches' and you "forgot"
> to send them too. :-)
>
>
> Almost related, does this update fix the reproducibility bug [1]? For example,
>
> --8<---------------cut here---------------start------------->8---
> ./pre-inst-env guix build julia
> ./pre-inst-env guix build julia --check --no-grafts -K
> --8<---------------cut here---------------end--------------->8---
>
>
> [1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22304
>
>
> All the best,
> simon

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-21 13:45       ` Nicolò Balzarotti
@ 2020-01-22  9:22         ` zimoun
  2020-01-22  9:59           ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-01-22  9:22 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicolò,

Cool that you figured out a source of non-reproducibility.


On Tue, 21 Jan 2020 at 14:45, Nicolò Balzarotti <anothersms@gmail.com> wrote:

> Sorry, I forgot to send the dsfmt patch.  Also, julia's
> SOURCE_DATE_EPOCH patch was named differently. I've fixed this in theattached patches.  You need to apply Add-dsfmt.patch, Update-to-1.3.1
> and then julia-use-SOURCE_DATE_EPOCH.

This patch 'julia-SOURCE_DATE_EPOCH-mtime.patch' is the one you
mentioned here [#], right?

Could you send it as an upstream PR?

[#] https://github.com/JuliaLang/julia/issues/34115#issuecomment-568171025


> About reproducibility: if I'm not wrong, sys.so contains Base library
> precompiled ([1]).  Precompilation is still non deterministic (here's
> [2] an issue on github). Something I did to check precompilation:

I am not sure to well understand the source of non-determinism.

Does the patch about SOURCE_DATE_EPOCH fix the issue of [1] and [2]?
Or is it something else?


> I could not get the same results twice (also, size differs).  I'll work
> on this on some spare time (for example, there are other places where
> SOURCE_DATE_EPOCH can be used, but this [3] is a problem I need to
> solve first).

Is the problem [3] not solved by 'julia-SOURCE_DATE_EPOCH-mtime.patch'?



> Maybe 1.3.1 (when reviewed) can be merged, since we have
> the same problem with julia 1.1, but we can wait for the
> source-date-epoch and julia-xyz patches until we solve this.

My opinion is: if a patch is floating around to fix the
source-date-epoch issue, let try to push it upstream. If it is
rejected, let talk later if Guix will include it or not. And in the
meantime, I will try to review the 1.3.1 because yes I agree that it
should be included even if we know it is not reproducible -- the
package Guitarix [@] is updated and not reproducible neither.

[@] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21803


Thank you for working on this.


All the best,
simon


> [1] https://docs.julialang.org/en/v1/devdocs/sysimg/
> [2] https://github.com/JuliaLang/julia/issues/25900
> [3] https://github.com/JuliaLang/julia/issues/34115

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-22  9:22         ` zimoun
@ 2020-01-22  9:59           ` Nicolò Balzarotti
  2020-01-24 17:26             ` zimoun
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-01-22  9:59 UTC (permalink / raw)
  To: zimoun; +Cc: Ludovic Courtès, 38546

Hi Simon,

zimoun <zimon.toutoune@gmail.com> writes:

> Hi Nicolò,
>
> Cool that you figured out a source of non-reproducibility.
>
>
> On Tue, 21 Jan 2020 at 14:45, Nicolò Balzarotti <anothersms@gmail.com> wrote:
>
>> Sorry, I forgot to send the dsfmt patch.  Also, julia's
>> SOURCE_DATE_EPOCH patch was named differently. I've fixed this in theattached patches.  You need to apply Add-dsfmt.patch, Update-to-1.3.1
>> and then julia-use-SOURCE_DATE_EPOCH.
>
> This patch 'julia-SOURCE_DATE_EPOCH-mtime.patch' is the one you
> mentioned here [#], right?
>
> Could you send it as an upstream PR?
>
> [#] https://github.com/JuliaLang/julia/issues/34115#issuecomment-568171025
>
>
>> About reproducibility: if I'm not wrong, sys.so contains Base library
>> precompiled ([1]).  Precompilation is still non deterministic (here's
>> [2] an issue on github). Something I did to check precompilation:
>
> I am not sure to well understand the source of non-determinism.
>
> Does the patch about SOURCE_DATE_EPOCH fix the issue of [1] and [2]?
> Or is it something else?
>

The first patch (the one I mention in [#]) fixes _one source of_
non-determinism (the stored mtime inside the precompile cache).  But
others are present (precompiling the same file 2 times lead to
differences even in file size, something I reported on [2]).  What I'm
working on is trying to find out what other sources are and patch them,
too.  I patched some c code (src/support/timefuncs.c) so that it follows
SOURCE_DATE_EPOCH too.  This finally lead to same-size files.  I'm now
working on parsing binary (.ji) files directly with julia built in
function to have a textual representation of the differences.

I can't send SOURCE_DATE_EPOCH patches upstream until [3] is merged, as
patching timefuncts leads to an endless test suite (as they were using
time() to check for passed time. If time() always returns 1, tests
sleeps forever).  Yesterday evening I completed that patch (and has been
approved).  My plans are on finding the hopefully last source of
non-determinism, patch it and send everything upstream (hoping they
care).

>
>> I could not get the same results twice (also, size differs).  I'll work
>> on this on some spare time (for example, there are other places where
>> SOURCE_DATE_EPOCH can be used, but this [3] is a problem I need to
>> solve first).
>
> Is the problem [3] not solved by 'julia-SOURCE_DATE_EPOCH-mtime.patch'?
>
>
>
>> Maybe 1.3.1 (when reviewed) can be merged, since we have
>> the same problem with julia 1.1, but we can wait for the
>> source-date-epoch and julia-xyz patches until we solve this.
>
> My opinion is: if a patch is floating around to fix the
> source-date-epoch issue, let try to push it upstream. If it is
> rejected, let talk later if Guix will include it or not. And in the
> meantime, I will try to review the 1.3.1 because yes I agree that it
> should be included even if we know it is not reproducible -- the
> package Guitarix [@] is updated and not reproducible neither.
>

Thanks! I hope in a 1.4 release where everything is fixed ;)

Nicolò

> [@] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21803
>
>
> Thank you for working on this.
>
>
> All the best,
> simon
>
>
>> [1] https://docs.julialang.org/en/v1/devdocs/sysimg/
>> [2] https://github.com/JuliaLang/julia/issues/25900
>> [3] https://github.com/JuliaLang/julia/issues/34115

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-22  9:59           ` Nicolò Balzarotti
@ 2020-01-24 17:26             ` zimoun
  2020-02-04 18:03               ` zimoun
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-01-24 17:26 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicolò,

On Wed, 22 Jan 2020 at 10:59, Nicolò Balzarotti <anothersms@gmail.com> wrote:

> The first patch (the one I mention in [#]) fixes _one source of_
> non-determinism (the stored mtime inside the precompile cache).  But
> others are present (precompiling the same file 2 times lead to
> differences even in file size, something I reported on [2]).  What I'm
> working on is trying to find out what other sources are and patch them,
> too.  I patched some c code (src/support/timefuncs.c) so that it follows
> SOURCE_DATE_EPOCH too.  This finally lead to same-size files.  I'm now
> working on parsing binary (.ji) files directly with julia built in
> function to have a textual representation of the differences.

Thank you for the explanations. Cool!


> I can't send SOURCE_DATE_EPOCH patches upstream until [3] is merged, as
> patching timefuncts leads to an endless test suite (as they were using
> time() to check for passed time. If time() always returns 1, tests
> sleeps forever).  Yesterday evening I completed that patch (and has been
> approved).  My plans are on finding the hopefully last source of
> non-determinism, patch it and send everything upstream (hoping they
> care).

Awesome if upstream are responsive.


> Thanks! I hope in a 1.4 release where everything is fixed ;)

I have seen that 1.4-rc1 is just released. Hope that everything about
reproducibility will be fixed. ;-)


I have not yet tried your patches. Sorry bit busy at work.
And I will not have any slot next week, so I will be back on the topic
after the Guix Days. Except if someone beats me. :-)
(see you there :-)


Thank you for improving the Julia ecosystem in Guix because Julia is
becoming quite popular.

Cheers,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-01-24 17:26             ` zimoun
@ 2020-02-04 18:03               ` zimoun
  2020-02-07 12:06                 ` zimoun
  2020-02-11 14:51                 ` zimoun
  0 siblings, 2 replies; 54+ messages in thread
From: zimoun @ 2020-02-04 18:03 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicoló,

On Fri, 24 Jan 2020 at 18:26, zimoun <zimon.toutoune@gmail.com> wrote:

> I have not yet tried your patches. Sorry bit busy at work.
> And I will not have any slot next week, so I will be back on the topic
> after the Guix Days. Except if someone beats me. :-)
> (see you there :-)

I have tried them. Ouch! The tests eat so much...

Do you have a special motivation to rename 'llvm-patch' to 'julia-patch'?
(I agree, it is better :-))

Well, only 2 inputs are missing. Do you think it is affordable to pack
them and so remove the commentary?

--8<---------------cut here---------------start------------->8---
;; 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.
;; Find dependencies versions here:
;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
--8<---------------cut here---------------end--------------->8---


Otherwise, there is some issues about indentation -- I think you use
Emacs, so check that '.dir-locals.el' is correctly setup -- double
space for sentences in description,
'patch/julia-SOURCE_DATE_EPOCH-mtime.patch' should be added with the
same commit that "Update", etc.
I have half-corrected so I can send you these 2 v2-patches if you want to. :-)

And I have not tried yet to build with '--check'.


All the best,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-02-04 18:03               ` zimoun
@ 2020-02-07 12:06                 ` zimoun
  2020-02-11 14:51                 ` zimoun
  1 sibling, 0 replies; 54+ messages in thread
From: zimoun @ 2020-02-07 12:06 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicoló,


On Tue, 4 Feb 2020 at 19:03, zimoun <zimon.toutoune@gmail.com> wrote:

> I have tried them. Ouch! The tests eat so much...

The tests fail on my desktop machine with 8GB of RAM.

--8<---------------cut here---------------start------------->8---
running testset Distributed...
ERROR: LoadError: TaskFailedException:
Timed out waiting to read host:port string from worker.
Stacktrace:
 [1] worker_from_id(::Distributed.ProcessGroup, ::Int64) at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/cluster.jl:1059
 [2] worker_from_id at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/cluster.jl:1056
[inlined]
 [3] #remote_do#156 at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/remotecall.jl:482
[inlined]
 [4] remote_do at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/remotecall.jl:482
[inlined]
 [5] kill at /tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/managers.jl:534
[inlined]
 [6] create_worker(::Distributed.LocalManager, ::WorkerConfig) at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/cluster.jl:581
 [7] setup_launched_worker(::Distributed.LocalManager, ::WorkerConfig,
::Array{Int64,1}) at
/tmp/guix-build-julia-1.3.1.drv-0/julia-1.3.1/usr/share/julia/stdlib/v1.3/Distributed/src/cluster.jl:523
 [8] (::Distributed.var"#43#46"{Distributed.LocalManager,Array{Int64,1},WorkerConfig})()
at ./task.jl:333

[...more failed...]
--8<---------------cut here---------------end--------------->8---


Do they pass on your machine?


> And I have not tried yet to build with '--check'.

Still not reproducible as expected [1]. :-)

[1] http://issues.guix.gnu.org/issue/22304


Cheers,
simon

ps:
I think you are busy by your thesis. Cross the fingers. ;-)

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-02-04 18:03               ` zimoun
  2020-02-07 12:06                 ` zimoun
@ 2020-02-11 14:51                 ` zimoun
  2020-02-11 15:10                   ` Nicolò Balzarotti
  1 sibling, 1 reply; 54+ messages in thread
From: zimoun @ 2020-02-11 14:51 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

Hi Nicoló,

I have seen your message on IRC.
Cool for the release 1.4.


Could we try to include first this 1.3 one?  Then push the 1.4 if it
is already ready.

Because then, this release will be usable "forever" (or almost ;-)
even if it is not perfect and issues are fixed with the 1.4.
I mean, once a package is inside Guix, then it becomes "easily" usable
with 'guix time-machine' and saved on Software Heritage.
Therefore, considering the big picture of Scientific Reproducibility,
it matters -- for the future to be able to travel back -- to also have
1.3. ;-)

I think we are almost done. From my point of view, we just need to
address (or comment) these 3 points:

1.
> Do you have a special motivation to rename 'llvm-patch' to 'julia-patch'?
> (I agree, it is better :-))


2.
> Well, only 2 inputs are missing. Do you think it is affordable to pack
> them and so remove the commentary?
>
> --8<---------------cut here---------------start------------->8---
> ;; 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.
> ;; Find dependencies versions here:
> ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
> --8<---------------cut here---------------end--------------->8---


3.
> Otherwise, there is some issues about indentation -- I think you use
> Emacs, so check that '.dir-locals.el' is correctly setup -- double
> space for sentences in description,
> 'patch/julia-SOURCE_DATE_EPOCH-mtime.patch' should be added with the
> same commit that "Update", etc.
> I have half-corrected so I can send you these 2 v2-patches if you want to. :-)



What do you think?


Cheers,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-02-11 14:51                 ` zimoun
@ 2020-02-11 15:10                   ` Nicolò Balzarotti
  2020-02-11 15:19                     ` zimoun
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-02-11 15:10 UTC (permalink / raw)
  To: zimoun; +Cc: Ludovic Courtès, 38546

zimoun <zimon.toutoune@gmail.com> writes:

Hi,
> Hi Nicoló,
>
> I have seen your message on IRC.
> Cool for the release 1.4.
>
>
> Could we try to include first this 1.3 one?  Then push the 1.4 if it
> is already ready.
>
> Because then, this release will be usable "forever" (or almost ;-)
> even if it is not perfect and issues are fixed with the 1.4.
> I mean, once a package is inside Guix, then it becomes "easily" usable
> with 'guix time-machine' and saved on Software Heritage.
> Therefore, considering the big picture of Scientific Reproducibility,
> it matters -- for the future to be able to travel back -- to also have
> 1.3. ;-)
>

Ok, let's do both
> I think we are almost done. From my point of view, we just need to
> address (or comment) these 3 points:
>
> 1.
>> Do you have a special motivation to rename 'llvm-patch' to 'julia-patch'?
>> (I agree, it is better :-))
>
Yes, because now it's not only used by llvm-julia but also by the new
libunwind-julia.  So calling llvm-patch a function that takes a patch
from the julia repo and that is applied to a "julia module" is measleading.

>
> 2.
>> Well, only 2 inputs are missing. Do you think it is affordable to pack
>> them and so remove the commentary?
>>
>> --8<---------------cut here---------------start------------->8---
>> ;; 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.
>> ;; Find dependencies versions here:
>> ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
>> --8<---------------cut here---------------end--------------->8---
>

I indeed tried.  The main problem is that in the Makefile there's no
USE_SYSTEM_{OBJCONV/LIBWHICH}, and I didn't want to mess with the it.
But yes, I think I could at least try again.

>
> 3.
>> Otherwise, there is some issues about indentation -- I think you use
>> Emacs, so check that '.dir-locals.el' is correctly setup -- double
>> space for sentences in description,
>> 'patch/julia-SOURCE_DATE_EPOCH-mtime.patch' should be added with the
>> same commit that "Update", etc.
>> I have half-corrected so I can send you these 2 v2-patches if you want to. :-)
>
>
If you already fixed them, yes please send a v2 patch and I'll continue
working from there.

>
> What do you think?
>
Fine for me, do we need also to debug a broken test right?
>
> Cheers,
> simon


Nicolò

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-02-11 15:10                   ` Nicolò Balzarotti
@ 2020-02-11 15:19                     ` zimoun
  2020-02-11 15:24                       ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-02-11 15:19 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Ludovic Courtès, 38546

On Tue, 11 Feb 2020 at 16:10, Nicolò Balzarotti <anothersms@gmail.com> wrote:

> > 1.
> >> Do you have a special motivation to rename 'llvm-patch' to 'julia-patch'?
> >> (I agree, it is better :-))
> >
> Yes, because now it's not only used by llvm-julia but also by the new
> libunwind-julia.  So calling llvm-patch a function that takes a patch
> from the julia repo and that is applied to a "julia module" is measleading.

Ok.


> > 2.
> >> Well, only 2 inputs are missing. Do you think it is affordable to pack
> >> them and so remove the commentary?
> >>
> >> --8<---------------cut here---------------start------------->8---
> >> ;; 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.
> >> ;; Find dependencies versions here:
> >> ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
> >> --8<---------------cut here---------------end--------------->8---
>
> I indeed tried.  The main problem is that in the Makefile there's no
> USE_SYSTEM_{OBJCONV/LIBWHICH}, and I didn't want to mess with the it.
> But yes, I think I could at least try again.

Let me check how it will be crawled by SWH to be sure that Guix will
be able to still build Julia 1.3 even if GitHub does not exist
anymore.
And I am in favour to let these 2 inputs.


> > 3.
> >> Otherwise, there is some issues about indentation -- I think you use
> >> Emacs, so check that '.dir-locals.el' is correctly setup -- double
> >> space for sentences in description,
> >> 'patch/julia-SOURCE_DATE_EPOCH-mtime.patch' should be added with the
> >> same commit that "Update", etc.
> >> I have half-corrected so I can send you these 2 v2-patches if you want to. :-)
> >
> If you already fixed them, yes please send a v2 patch and I'll continue
> working from there.

Stay tuned. :-)
I try to send it today...


> Fine for me, do we need also to debug a broken test right?

I do not know if the test are broken. I am not able to run them on my
desktop machine. Not enough memory.


Cheers,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [00/11] Update Julia, Fix precompilation, add HTTP.jl
  2020-02-11 15:19                     ` zimoun
@ 2020-02-11 15:24                       ` Nicolò Balzarotti
  0 siblings, 0 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-02-11 15:24 UTC (permalink / raw)
  To: zimoun; +Cc: Ludovic Courtès, 38546

zimoun <zimon.toutoune@gmail.com> writes:

Hi

> On Tue, 11 Feb 2020 at 16:10, Nicolò Balzarotti <anothersms@gmail.com> wrote:
>
>> > 1.
>> >> Do you have a special motivation to rename 'llvm-patch' to 'julia-patch'?
>> >> (I agree, it is better :-))
>> >
>> Yes, because now it's not only used by llvm-julia but also by the new
>> libunwind-julia.  So calling llvm-patch a function that takes a patch
>> from the julia repo and that is applied to a "julia module" is measleading.
>
> Ok.
>
>
>> > 2.
>> >> Well, only 2 inputs are missing. Do you think it is affordable to pack
>> >> them and so remove the commentary?
>> >>
>> >> --8<---------------cut here---------------start------------->8---
>> >> ;; 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.
>> >> ;; Find dependencies versions here:
>> >> ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
>> >> --8<---------------cut here---------------end--------------->8---
>>
>> I indeed tried.  The main problem is that in the Makefile there's no
>> USE_SYSTEM_{OBJCONV/LIBWHICH}, and I didn't want to mess with the it.
>> But yes, I think I could at least try again.
>
> Let me check how it will be crawled by SWH to be sure that Guix will
> be able to still build Julia 1.3 even if GitHub does not exist
> anymore.
> And I am in favour to let these 2 inputs.
>
>
>> > 3.
>> >> Otherwise, there is some issues about indentation -- I think you use
>> >> Emacs, so check that '.dir-locals.el' is correctly setup -- double
>> >> space for sentences in description,
>> >> 'patch/julia-SOURCE_DATE_EPOCH-mtime.patch' should be added with the
>> >> same commit that "Update", etc.
>> >> I have half-corrected so I can send you these 2 v2-patches if you want to. :-)
>> >
>> If you already fixed them, yes please send a v2 patch and I'll continue
>> working from there.
>
> Stay tuned. :-)
> I try to send it today...
>
Don't worry, I'm still working on my PhD thesis so my spare time until
the end of the week is low :D
>
>> Fine for me, do we need also to debug a broken test right?
>
> I do not know if the test are broken. I am not able to run them on my
> desktop machine. Not enough memory.
>
Ok, so I'll run tests a few times on my server then
>
> Cheers,
> simon

Thanks, Nicolò

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done
  2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
                     ` (19 preceding siblings ...)
  2020-01-18 14:35   ` [bug#38546] Julia patches v3 Nicolò Balzarotti
@ 2020-02-11 17:58   ` zimoun
  2020-02-24 12:50     ` zimoun
  20 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-02-11 17:58 UTC (permalink / raw)
  To: 38546, Nicolò Balzarotti

[-- Attachment #1: Type: text/plain, Size: 299 bytes --]

Hi,

Please find attach the almost updated julia using 2 patches. The first
add a dependency and the second update and patch.

I hope that I do not screw up the indentation; sometimes my Emacs does
weird stuff. Anyway.

If it is fine with you, please ping Ludo or any committer. :-)


Cheers,
simon

[-- Attachment #2: v4-0002-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 24992 bytes --]

From 33a547f83f9da2ee5b629e710b31ea5be3492776 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Thu, 12 Dec 2019 09:43:20 +0100
Subject: [PATCH v4 2/2] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1.
* gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch: New file.
* gnu/packages/julia.scm (libuv-julia): Update to 2.0.0.
* gnu/packages/julia.scm (llvm-patch, llvm-patch-url): Rename to...
(julia-patch, llvm-patch-rul): ... these.
---
 gnu/local.mk                                  |   1 +
 gnu/packages/julia.scm                        | 322 ++++++++----------
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       |  22 ++
 3 files changed, 161 insertions(+), 184 deletions(-)
 create mode 100644 gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 59589f292a..02e4284cc9 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1030,6 +1030,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch      \
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..1f915ae28b 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,30 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
+(define (julia-patch-url version name)
+  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
+		 "/deps/patches/" name ".patch"))
+
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
+    (origin
+      (method url-fetch)
+      (uri (julia-patch-url version name))
+      (sha256 (base32 sha))
+      (file-name name))))
+
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
     ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +77,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,16 +86,27 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
-  (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
-
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
-    (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
-	    (sha256 (base32 sha))
-	    (file-name name))))
+(define libunwind-julia
+  ;; The Julia projects requires their patched version.
+  ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+              (patches
+               (list
+                (julia-patch "libunwind-prefer-extbl"
+                             "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+                (julia-patch "libunwind-static-arm"
+                             "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (home-page "https://github.com/JuliaLang/tree/master/deps/")))
 
 (define llvm-julia
   (package
@@ -98,41 +123,44 @@
               ;; but they are required to build Julia.
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
-               (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-6.0-D44650"
+                       "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm-6.0-NVPTX-addrspaces"
+                       "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                     '("llvm-6.0.0_D27296-libssp"
+                       "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm-D34078-vectorize-fdiv"
+                       "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                     '("llvm-D42262-jumpthreading-not-i1"
+                       "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                     '("llvm-D44892-Perf-integration"
+                       "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                     '("llvm-D46460"
+                       "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                     '("llvm-D49832-SCEVPred"
+                       "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                     '("llvm-D50010-VNCoercion-ni"
+                       "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                     '("llvm-D50167-scev-umin"
+                       "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                     '("llvm-OProfile-line-num"
+                       "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                     '("llvm-PPC-addrspaces"
+                       "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                     '("llvm-rL323946-LSRTy"
+                       "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                     '("llvm-rL326967-aligned-load"
+                       "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                     '("llvm-rL327898"
+                       "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
@@ -158,7 +186,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,10 +194,13 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:test-target "test"
+     `(#:tests? #t                      ;tests are strongly intensive
+       #:test-target "test"
        #:modules ((ice-9 match)
                   (guix build gnu-build-system)
                   (guix build utils))
@@ -188,30 +219,24 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
-
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +258,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+                              "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +271,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,38 +289,28 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
              #t))
-         (add-before 'check 'disable-broken-tests
+         (add-before 'check 'fix-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",\"client\",\"stacktraces\"]),testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
 	     #t)))
        #:make-flags
        (list
@@ -345,26 +328,21 @@
            ;; 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.
+        "CONFIG_SHELL=bash"             ;needed to build bundled libraries
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -385,16 +363,19 @@
 	"USE_SYSTEM_PATCHELF=1"
 	"USE_SYSTEM_PCRE=1"
 	"USE_SYSTEM_OPENLIBM=1"
-
+        "USE_SYSTEM_LIBM=0"
+        "USE_SYSTEM_LIBSSH2=1"
+        "USE_SYSTEM_CURL=1"
 	"USE_SYSTEM_GMP=1"
 	"USE_SYSTEM_MPFR=1"
+	"USE_SYSTEM_MBEDTLS=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+	"USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
 
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +384,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +399,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -467,15 +429,7 @@
 	     (sha256
 	      (base32
 	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
new file mode 100644
index 0000000000..b60f284923
--- /dev/null
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -0,0 +1,22 @@
+Fix one of upstream non-determinism, tracked here:
+
+https://github.com/JuliaLang/julia/issues/34115
+https://github.com/JuliaLang/julia/issues/25900
+
+
+Patch by Nicoló Balzarotti <nicolo@nixo.xyz>.
+
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++          push!(_require_dependencies,
++                (mod, path,
++                 haskey(ENV, "SOURCE_DATE_EPOCH") ?
++                 parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
-- 
2.23.0


[-- Attachment #3: v4-0001-gnu-Add-dsfmt.patch --]
[-- Type: text/x-patch, Size: 4137 bytes --]

From c9fb979b67f15ff9f4744af21d1e91017037af17 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Sat, 28 Dec 2019 00:10:48 +0100
Subject: [PATCH v4 1/2] gnu: Add dsfmt.

* gnu/packages/maths.scm (dsfmt): New variable.
---
 gnu/packages/maths.scm | 65 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 65 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 8f4478b6bb..1f80cb3f3a 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -33,6 +33,7 @@
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2019 Robert Smith <robertsmith@posteo.net>
+;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -372,6 +373,70 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dsfmt
+  (package
+    (name "dsfmt")
+    (version "2.2.3")
+    (source (origin
+              (method url-fetch)
+              (uri
+               (string-append
+                "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-"
+                version ".tar.gz"))
+              (sha256
+               (base32
+                "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))
+              ;; julia needs those (and is the only program depending on dsfmt now)
+              (patches
+               (list
+                (origin (method url-fetch)
+                        (uri
+                         "https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/patches/dSFMT.c.patch")
+                        (sha256 (base32 "09mhv11bms8jsmkmdqvlcgljwhzw3b6n9nncpi2b6dla9798hw2y"))
+                        (file-name "dSFMT.c.patch"))
+                (origin (method url-fetch)
+                        (uri
+                         "https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/patches/dSFMT.h.patch")
+                        (sha256 (base32 "1py5rd0yxic335lzka23f6x2dhncrpizpyrk57gi2f28c0p98y5n"))
+                        (file-name "dSFMT.h.patch"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'build
+           ;; upstream Makefile does not build a shared library
+           (lambda _
+             (invoke
+              "gcc"
+              ;; flags copied from julia
+              ;; https://github.com/JuliaLang/julia/blob/v1.3.0/deps/dsfmt.mk
+              "-DNDEBUG" "-DDSFMT_MEXP=19937"
+              "-fPIC" "-DDSFMT_DO_NOT_USE_OLD_NAMES"
+              "-O3" "-finline-functions" "-fomit-frame-pointer"
+              "-fno-strict-aliasing" "--param" "max-inline-insns-single=1800"
+              "-Wmissing-prototypes" "-Wall" "-std=c99" "-shared" "dSFMT.c"
+              "-o" "libdSFMT.so")))
+         (replace 'install              ;no "install" target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((lib (string-append (assoc-ref outputs "out")
+                                       "/lib"))
+                   (inc (string-append (assoc-ref outputs "out")
+                                       "/include")))
+               (install-file "libdSFMT.so" lib)
+               (install-file "dSFMT.h" inc)
+               #t))))))
+    (synopsis "Double precision SIMD-oriented Fast Mersenne Twister")
+    (description
+     "The dSMFT package speeds up Fast Mersenne Twister generation by avoiding
+the expensive conversion of integer to double (floating point).  dSFMT directly
+generates double precision floating point pseudorandom numbers which have the
+IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
+format.  dSFMT is only available on the CPUs which use IEEE 754 format double
+precision floating point numbers.")
+    (home-page "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/")
+    (license license:bsd-3)))
+
 (define-public gsl
   (package
     (name "gsl")
-- 
2.23.0


^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done
  2020-02-11 17:58   ` [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done zimoun
@ 2020-02-24 12:50     ` zimoun
  2020-02-24 20:59       ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-02-24 12:50 UTC (permalink / raw)
  To: 38546, Nicolò Balzarotti

Hi,

Friendly ping. :-)


On Tue, 11 Feb 2020 at 18:58, zimoun <zimon.toutoune@gmail.com> wrote:
>
> Hi,
>
> Please find attach the almost updated julia using 2 patches. The first
> add a dependency and the second update and patch.
>
> I hope that I do not screw up the indentation; sometimes my Emacs does
> weird stuff. Anyway.
>
> If it is fine with you, please ping Ludo or any committer. :-)
>
>
> Cheers,
> simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done
  2020-02-24 12:50     ` zimoun
@ 2020-02-24 20:59       ` Nicolò Balzarotti
  2020-02-25 16:12         ` zimoun
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-02-24 20:59 UTC (permalink / raw)
  To: zimoun, 38546

[-- Attachment #1: Type: text/plain, Size: 566 bytes --]

zimoun <zimon.toutoune@gmail.com> writes:

> Hi,
>
Hi, 
> Friendly ping. :-)
>

Here's a friendly 1.3.1 + HTTP.jl + dependencies patch submission.
Hopefully this time it's fine.  Package precompilation should be working
now (except json, whose cache, for some reason, is not valid and gets
rebuilt).
As a reminder: determinism is still not addressed and will be fixed in
the 1.4.0 release (hopefully, upstream is still not that responsive).
However, there are dozens of julia packages that I want to package, so
if this first batch is finally fine, more will come.


[-- Attachment #2: 0001-gnu-Add-dsfmt.patch --]
[-- Type: text/x-patch, Size: 4200 bytes --]

From aa02b06ade12613f81ddc0415fb0eecffb808352 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:06:28 +0100
Subject: [PATCH 01/16] gnu: Add dsfmt.

* gnu/packages/maths.scm (dsfmt): New variable.
---
 gnu/packages/maths.scm | 72 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 10071c10d5..1c55334a7d 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -33,6 +33,7 @@
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2019 Robert Smith <robertsmith@posteo.net>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -373,6 +374,77 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dsfmt
+  (package
+    (name "dsfmt")
+    (version "2.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append
+         "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-"
+         version ".tar.gz"))
+       (sha256
+        (base32
+         "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))
+       ;; julia needs those (and is the only program depending on dsfmt now)
+       (patches
+        (list
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.c.patch"))
+           (sha256 (base32
+                    "09mhv11bms8jsmkmdqvlcgljwhzw3b6n9nncpi2b6dla9798hw2y"))
+           (file-name "dSFMT.c.patch"))
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.h.patch"))
+           (sha256 (base32
+                    "1py5rd0yxic335lzka23f6x2dhncrpizpyrk57gi2f28c0p98y5n"))
+           (file-name "dSFMT.h.patch"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'build
+           ;; upstream Makefile does not build a shared library
+           (lambda _
+             (invoke
+              "gcc"
+              ;; flags copied from julia
+              ;; https://github.com/JuliaLang/julia/blob/v1.3.0/deps/dsfmt.mk
+              "-DNDEBUG" "-DDSFMT_MEXP=19937"
+              "-fPIC" "-DDSFMT_DO_NOT_USE_OLD_NAMES"
+              "-O3" "-finline-functions" "-fomit-frame-pointer"
+              "-fno-strict-aliasing" "--param" "max-inline-insns-single=1800"
+              "-Wmissing-prototypes" "-Wall" "-std=c99" "-shared" "dSFMT.c"
+              "-o" "libdSFMT.so")))
+         (replace 'install              ;no "install" target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((lib (string-append (assoc-ref outputs "out")
+                                       "/lib"))
+                   (inc (string-append (assoc-ref outputs "out")
+                                       "/include")))
+               (install-file "libdSFMT.so" lib)
+               (install-file "dSFMT.h" inc)
+               #t))))))
+    (synopsis "Double precision SIMD-oriented Fast Mersenne Twister")
+    (description
+     "The dSMFT package speeds up Fast Mersenne Twister generation by avoiding
+the expensive conversion of integer to double (floating point).  dSFMT directly
+generates double precision floating point pseudorandom numbers which have the
+IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
+format.  dSFMT is only available on the CPUs which use IEEE 754 format double
+precision floating point numbers.")
+    (home-page "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/")
+    (license license:bsd-3)))
+
 (define-public gsl
   (package
     (name "gsl")
-- 
2.25.0


[-- Attachment #3: 0002-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 27029 bytes --]

From 2a4e73c2c4700be23092197c48465a605786683d Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:07:27 +0100
Subject: [PATCH 02/16] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1
* gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch: New file.
* gnu/packages/patches/julia-no-project-name-cache.patch: New file.
* gnu/local.mk: Add julia patches.
---
 gnu/local.mk                                  |   2 +
 gnu/packages/julia.scm                        | 348 +++++++++---------
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       |  22 ++
 3 files changed, 188 insertions(+), 184 deletions(-)
 create mode 100644 gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 1f7cad9d32..c2273d5745 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -26,6 +26,7 @@
 # Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
 # Copyright © 2019 Brett Gilio <brettg@gnu.org>
 # Copyright © 2019 Amin Bandali <mab@gnu.org>
+# Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 #
 # This file is part of GNU Guix.
 #
@@ -1038,6 +1039,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..74d214930e 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,18 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
-    ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
+    ;; When upgrading Julia, also upgrade this.  Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +65,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,14 +74,37 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
+(define libunwind-julia
+  ;; The Julia projects requires their patched version.
+  ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+       (patches
+        (list
+         (julia-patch "libunwind-prefer-extbl"
+                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+         (julia-patch "libunwind-static-arm"
+                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (home-page "https://github.com/JuliaLang/tree/master/deps/")))
+
+(define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
+                 "/deps/patches/" name ".patch"))
 
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
+	    (uri (julia-patch-url version name))
 	    (sha256 (base32 sha))
 	    (file-name name))))
 
@@ -98,41 +123,44 @@
               ;; but they are required to build Julia.
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
-               (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-6.0-D44650"
+                       "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm-6.0-NVPTX-addrspaces"
+                       "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                     '("llvm-6.0.0_D27296-libssp"
+                       "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm-D34078-vectorize-fdiv"
+                       "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                     '("llvm-D42262-jumpthreading-not-i1"
+                       "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                     '("llvm-D44892-Perf-integration"
+                       "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                     '("llvm-D46460"
+                       "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                     '("llvm-D49832-SCEVPred"
+                       "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                     '("llvm-D50010-VNCoercion-ni"
+                       "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                     '("llvm-D50167-scev-umin"
+                       "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                     '("llvm-OProfile-line-num"
+                       "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                     '("llvm-PPC-addrspaces"
+                       "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                     '("llvm-rL323946-LSRTy"
+                       "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                     '("llvm-rL326967-aligned-load"
+                       "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                     '("llvm-rL327898"
+                       "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
@@ -158,7 +186,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +194,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +218,25 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
 
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +258,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +271,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,39 +289,50 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-before 'build 'fix-precompile
+           (lambda _
+             (substitute* "base/loading.jl"
+               (("something(Base.active_project(), \"\")") "\"\""))
              #t))
          (add-before 'check 'disable-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
-	     #t)))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",
+                                          \"stress\",\"precompile\",
+                                          \"client\",\"stacktraces\"]),
+                                       testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
+             #t))
+	 (add-after 'install 'make-wrapper
+	   (lambda* (#:key inputs outputs #:allow-other-keys)
+	     (let* ((out (assoc-ref outputs "out"))
+		    (bin (string-append out "/bin"))
+		    (program "julia"))
+	       (with-directory-excursion bin
+		 (wrap-program program
+		   `("JULIA_LOAD_PATH" ":" prefix
+		     ("" "$JULIA_LOAD_PATH")))
+		 (wrap-program program
+		   `("JULIA_DEPOT_PATH" ":" prefix
+		     ("" "$JULIA_DEPOT_PATH"))))
+	       #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -346,25 +350,20 @@
            (_ "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.
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -390,11 +389,16 @@
 	"USE_SYSTEM_MPFR=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
-
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +407,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +422,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -466,16 +451,8 @@
                                        ".tar.gz"))
 	     (sha256
 	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
@@ -485,7 +462,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
new file mode 100644
index 0000000000..b60f284923
--- /dev/null
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -0,0 +1,22 @@
+Fix one of upstream non-determinism, tracked here:
+
+https://github.com/JuliaLang/julia/issues/34115
+https://github.com/JuliaLang/julia/issues/25900
+
+
+Patch by Nicoló Balzarotti <nicolo@nixo.xyz>.
+
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++          push!(_require_dependencies,
++                (mod, path,
++                 haskey(ENV, "SOURCE_DATE_EPOCH") ?
++                 parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
-- 
2.25.0


[-- Attachment #4: 0003-gnu-julia-build-system-Enable-tests-fix-precompilati.patch --]
[-- Type: text/x-patch, Size: 6078 bytes --]

From 69bfdff9a8772bbe9254c9cd3a97966e059060af Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:28:45 +0100
Subject: [PATCH 03/16] gnu: julia-build-system: Enable tests, fix
 precompilation.

---
 guix/build-system/julia.scm       |  2 +-
 guix/build/julia-build-system.scm | 71 +++++++++++++++----------------
 2 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/guix/build-system/julia.scm b/guix/build-system/julia.scm
index 488fe9bb1d..d3cb41c054 100644
--- a/guix/build-system/julia.scm
+++ b/guix/build-system/julia.scm
@@ -75,7 +75,7 @@
 
 (define* (julia-build store name inputs
                       #:key source
-                      (tests? #f)
+                      (tests? #t)
                       (phases '(@ (guix build julia-build-system)
                                   %standard-phases))
                       (outputs '("out"))
diff --git a/guix/build/julia-build-system.scm b/guix/build/julia-build-system.scm
index ff6fcf5fe3..2916775c9d 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2019 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2019, 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,54 +37,53 @@
 ;; subpath where we store the package content
 (define %package-path "/share/julia/packages/")
 
-(define (generate-load-path inputs outputs)
-  (string-append
-   (string-join (map (match-lambda
-                       ((_ . path)
-                        (string-append path %package-path)))
-                     ;; Restrict to inputs beginning with "julia-".
-                     (filter (match-lambda
-                               ((name . _)
-                                (string-prefix? "julia-" name)))
-                             inputs))
-                ":")
-   (string-append ":" (assoc-ref outputs "out") %package-path)
-   ;; stdlib is always required to find Julia's standard libraries.
-   ;; usually there are other two paths in this variable:
-   ;; "@" and "@v#.#"
-   ":@stdlib"))
-
 (define* (install #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (package-dir (string-append out %package-path
-                                     (string-append
-                                      (strip-store-file-name source)))))
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
+                                     (strip-store-file-name source))))
     (mkdir-p package-dir)
-    (copy-recursively source package-dir))
+    (copy-recursively (getcwd) package-dir))
   #t)
 
-;; TODO: Precompilation is working, but I don't know how to tell
-;; julia to use use it. If (on rantime) we set HOME to
-;; store path, julia tries to write files there (failing)
 (define* (precompile #:key source inputs outputs #:allow-other-keys)
   (let* ((out (assoc-ref outputs "out"))
          (builddir (string-append out "/share/julia/"))
          (package (strip-store-file-name source)))
     (mkdir-p builddir)
     (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    ;; Actual precompilation
-    (invoke-julia (string-append "using " package)))
+    ;; add new package dir to the load path
+    (setenv "JULIA_LOAD_PATH"
+            (string-append builddir "packages/"
+                           (if (getenv "JULIA_LOAD_PATH")
+                               (string-append ":" (getenv "JULIA_LOAD_PATH"))
+                               "")))
+    ;; Actual precompilation.
+    (invoke-julia
+     ;; when using julia as a user, julia writes precompile cache to the first
+     ;; entry of the DEPOT_PATH list (by default, the home dir).  We want to
+     ;; write it to the store, so let's push the store path as the first
+     ;; element of DEPOT_PATH.  Once the cache file exists, this hack is not
+     ;; needed anymore (like in the check phase).  If the user install new
+     ;; pacakges, those will be installed and precompiled in the home dir
+     (string-append "pushfirst!(DEPOT_PATH, pop!(DEPOT_PATH)); using " package)))
   #t)
 
-(define* (check #:key source inputs outputs #:allow-other-keys)
-  (let* ((out (assoc-ref outputs "out"))
-         (package (strip-store-file-name source))
-         (builddir (string-append out "/share/julia/")))
-    (setenv "JULIA_DEPOT_PATH" builddir)
-    (setenv "JULIA_LOAD_PATH" (generate-load-path inputs outputs))
-    (invoke-julia (string-append "using Pkg;Pkg.test(\"" package "\")")))
+(define* (check #:key tests? source outputs #:allow-other-keys)
+  (if tests?
+      (let* ((out (assoc-ref outputs "out"))
+             (package (strip-store-file-name source))
+             (builddir (string-append out "/share/julia/")))
+        (setenv "HOME" "/tmp")
+        (setenv "JULIA_DEPOT_PATH" builddir)
+        (setenv "JULIA_LOAD_PATH"
+                (string-append builddir "packages/" ":"
+                               (or (getenv "JULIA_LOAD_PATH")
+                                   "")))
+        ;; tests assume they are run from the test directory
+        (with-directory-excursion
+            (string-append builddir "packages/" package "/test/")
+          (invoke "julia" "runtests.jl")))
+      (format #t "test suite not run~%"))
   #t)
 
 (define (julia-create-package-toml outputs source
@@ -119,7 +118,7 @@ version = \"" version "\"
     (delete 'check) ; tests must be run after installation
     (replace 'install install)
     (add-after 'install 'precompile precompile)
-    ;; (add-after 'install 'check check)
+    (add-after 'precompile 'check check)
     ;; TODO: In the future we could add a "system-image-generation" phase
     ;; where we use PackageCompiler.jl to speed up package loading times
     (delete 'configure)
-- 
2.25.0


[-- Attachment #5: 0004-gnu-Add-julia-compat.patch --]
[-- Type: text/x-patch, Size: 3035 bytes --]

From a185f2d8112d55fe34fe5640edc6e4f46fece226 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:30:39 +0100
Subject: [PATCH 04/16] gnu: Add julia-compat.

* gnu/packages/julia-xyz.scm (julia-compat): New variable.
* gnu/packages/julia-xyz.scm: New file.
* gnu/local.mk: Add gnu/packages/julia-xyz.scm.
---
 gnu/local.mk               |  1 +
 gnu/packages/julia-xyz.scm | 45 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 46 insertions(+)
 create mode 100644 gnu/packages/julia-xyz.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index c2273d5745..1ebcc45a4c 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -281,6 +281,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/jrnl.scm				\
   %D%/packages/jose.scm				\
   %D%/packages/julia.scm			\
+  %D%/packages/julia-xyz.scm			\
   %D%/packages/jupyter.scm			\
   %D%/packages/kawa.scm				\
   %D%/packages/kde.scm				\
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
new file mode 100644
index 0000000000..abcfc4d0cf
--- /dev/null
+++ b/gnu/packages/julia-xyz.scm
@@ -0,0 +1,45 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;;
+;;; 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-xyz)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix git-download)
+  #:use-module (guix build-system julia))
+
+(define-public julia-compat
+  (package
+    (name "julia-compat")
+    (version "3.6.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/Compat.jl")
+             (commit (string-append "v" version))))
+       (file-name "Compat")
+       (sha256
+        (base32 "0dxy0kpwgz3a9w665lp154x9yrnic89f2b27b1nmh69jhnnb2zgr"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaLang/Compat.jl")
+    (synopsis "Compatibility across Julia versions")
+    (description "The Compat package is designed to ease interoperability
+between older and newer versions of the Julia language.  The Compat package
+provides a macro that lets you use the latest syntax in a backwards-compatible
+way.")
+    (license license:expat)))
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #6: 0005-gnu-Add-julia-sha.patch --]
[-- Type: text/x-patch, Size: 1651 bytes --]

From a7a34a28d99bd9411d18e0e7f3d4efb406f2a817 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:33:08 +0100
Subject: [PATCH 05/16] gnu: Add julia-sha.

* gnu/packages/julia-xyz.scm (julia-sha): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index abcfc4d0cf..91d497a0ce 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -43,3 +43,27 @@ between older and newer versions of the Julia language.  The Compat package
 provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
+
+(define-public julia-sha
+  (package
+    (name "julia-sha")
+    (version "0.5.7")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/staticfloat/SHA.jl")
+             ;; tests fixed in this untagged version
+             (commit "97b17a7fabf894257726c33cbd78255ac380906d")))
+       (file-name "SHA")
+       (sha256
+        (base32 "169y78cmppj117cmh8ncnyh381caf9dsklaks5l40mia9jdcqbgl"))))
+    (build-system julia-build-system)
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (home-page "https://github.com/staticfloat/SHA.jl")
+    (synopsis
+     "Performant, 100% native-julia SHA1, SHA2, and SHA3 implementation")
+    (description "Julia package implementing SHA algorithms.  Each exported
+function takes in either an @code{Array{UInt8}}, a @code{ByteString} or an
+@code{IO} object.")
+    (license license:expat)))
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #7: 0006-gnu-Add-julia-binaryprovider.patch --]
[-- Type: text/x-patch, Size: 1892 bytes --]

From 3fae18e43bd9cd0931d153a0b47bd2ba90d7eedb Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:42:00 +0100
Subject: [PATCH 06/16] gnu: Add julia-binaryprovider.

* gnu/packages/julia-xyz.scm (julia-binaryprovider): New variable.
---
 gnu/packages/julia-xyz.scm | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 91d497a0ce..86c0a6c3e9 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -20,7 +20,33 @@
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix git-download)
-  #:use-module (guix build-system julia))
+  #:use-module (guix build-system julia)
+  #:use-module (gnu packages curl))
+
+(define-public julia-binaryprovider
+  (package
+    (name "julia-binaryprovider")
+    (version "0.5.8")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaPackaging/BinaryProvider.jl")
+             (commit (string-append "v" version))))
+       (file-name "BinaryProvider")
+       (sha256
+        (base32 "174jmg4w8ncgfhdvfnm0p4cnlayw31j4s9sksqlwz1sipywqvww7"))))
+    (build-system julia-build-system)
+    ;; We don't really need BinaryProvider (as guix provides the binaries) but
+    ;; since it's a dependency of other packages we want to precompile it.
+    (arguments `(#:tests? #f))
+    (propagated-inputs `(("julia-sha" ,julia-sha)))
+    (inputs `(("curl" ,curl)))
+    (home-page "https://github.com/JuliaPackaging/BinaryProvider.jl")
+    (synopsis "Reliable Binary provider for Julia")
+    (description "@code{BinaryProvider.jl} simplifies the installation of
+binaries required by julia packages.")
+    (license license:expat)))
 
 (define-public julia-compat
   (package
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #8: 0007-gnu-Add-julia-inifile.patch --]
[-- Type: text/x-patch, Size: 1451 bytes --]

From 3f4e7fdbe183b950ef57c71b25de13ffc29eea68 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:42:59 +0100
Subject: [PATCH 07/16] gnu: Add julia-inifile.

* gnu/packages/julia-xyz.scm (julia-inifile): New variable.
---
 gnu/packages/julia-xyz.scm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 86c0a6c3e9..213aa0543c 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -70,6 +70,26 @@ provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
 
+(define-public julia-inifile
+  (package
+    (name "julia-inifile")
+    (version "0.5.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/IniFile.jl")
+             (commit "8ba59958495fa276d6489d2c3903e765d75e0bc0")))
+       (file-name "IniFile")
+       (sha256
+        (base32 "11h6f99jpbg729lplw841m68jprka7q3n8yw390bndlmcdsjabpd"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaIO/IniFile.jl")
+    (synopsis "Reading Windows-style INI files")
+    (description "This is a julia package that defines an IniFile type that
+allows to interface with @file{.ini} files.")
+    (license license:expat)))
+
 (define-public julia-sha
   (package
     (name "julia-sha")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #9: 0008-gnu-Add-julia-mbedtls.patch --]
[-- Type: text/x-patch, Size: 3280 bytes --]

From 44e8535f4e8b72cdb99c396dab53badcd5b02073 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:43:37 +0100
Subject: [PATCH 08/16] gnu: Add julia-mbedtls.

* gnu/packages/julia-xyz.scm (julia-mbedtls): New variable.
---
 gnu/packages/julia-xyz.scm | 55 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 54 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 213aa0543c..508b4835ca 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -21,7 +21,8 @@
   #:use-module (guix packages)
   #:use-module (guix git-download)
   #:use-module (guix build-system julia)
-  #:use-module (gnu packages curl))
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages tls))
 
 (define-public julia-binaryprovider
   (package
@@ -90,6 +91,58 @@ way.")
 allows to interface with @file{.ini} files.")
     (license license:expat)))
 
+(define-public julia-mbedtls
+  (package
+    (name "julia-mbedtls")
+    (version "0.7.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaLang/MbedTLS.jl")
+             (commit (string-append "v" version))))
+       (file-name "MbedTLS")
+       (sha256
+        (base32 "1a8snw9gi21lm6r3kh6ly7ngi99s9k5shqkfiizj3g9li20q23h2"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-binaryprovider" ,julia-binaryprovider)))
+    (inputs `(("mbedtls-apache" ,mbedtls-apache)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'disable-network-tests
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("testhost =") "return #"))
+             #t))
+         ;; Add binary dependency paths
+         (add-before 'precompile 'build-deps
+           (lambda* (#:key outputs source inputs #:allow-other-keys)
+             (let ((f (open-file
+                       (string-append
+                        (assoc-ref outputs "out")
+                        "/share/julia/packages/"
+                        (string-append
+                         (strip-store-file-name source) "/deps/deps.jl"))
+                       "w")))
+               (display (string-append "const libmbedcrypto = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedcrypto.so\"\n") f)
+               (display (string-append "const libmbedtls = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedtls.so\"\n") f)
+               (display (string-append "const libmbedx509 = \""
+                                       (assoc-ref inputs "mbedtls-apache")
+                                       "/lib/libmbedx509.so\"\n") f)
+               (close-port f))
+             #t)))))
+    (home-page "https://github.com/JuliaLang/MbedTLS.jl")
+    (synopsis "Apache's mbed TLS library wrapper")
+    (description "@code{MbedTLS.jl} provides a wrapper around the mbed TLS and
+cryptography C libary for Julia.")
+    (license license:expat)))
+
 (define-public julia-sha
   (package
     (name "julia-sha")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #10: 0009-gnu-Add-julia-bufferedstreams.patch --]
[-- Type: text/x-patch, Size: 1695 bytes --]

From 2f205551cf5193a4d41541ba772b1db10f2f9248 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:46:35 +0100
Subject: [PATCH 09/16] gnu: Add julia-bufferedstreams.

* gnu/packages/julia-xyz.scm (julia-bufferedstreams): New variable.
---
 gnu/packages/julia-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 508b4835ca..c26765f2a4 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -49,6 +49,31 @@
 binaries required by julia packages.")
     (license license:expat)))
 
+(define-public julia-bufferedstreams
+  (package
+    (name "julia-bufferedstreams")
+    (version "1.0.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/BioJulia/BufferedStreams.jl")
+             (commit (string-append "v" version))))
+       (file-name "BufferedStreams")
+       (sha256
+        (base32 "0sf4sxbq55mg2pwxyxf0c839z1lk0yxg8nmb7617bfbvw31cp88z"))))
+    (build-system julia-build-system)
+    ;; tests are freezing, see
+    ;; https://travis-ci.org/BioJulia/BufferedStreams.jl/jobs/491050182
+    (arguments '(#:tests? #f))
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (home-page "https://github.com/BioJulia/BufferedStreams.jl")
+    (synopsis "Fast composable IO streams")
+    (description "@code{BufferedStreams} provides buffering for IO
+operations.  It can wrap any IO type automatically making incremental reading
+and writing faster.")
+    (license license:expat)))
+
 (define-public julia-compat
   (package
     (name "julia-compat")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #11: 0010-gnu-Add-julia-parsers.patch --]
[-- Type: text/x-patch, Size: 1423 bytes --]

From 5a906605765854b7955a8530e89f63959f3cc2ff Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:48:25 +0100
Subject: [PATCH 10/16] gnu: Add julia-parsers.

* gnu/packages/julia-xyz.scm (julia-parsers): New variable.
---
 gnu/packages/julia-xyz.scm | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index c26765f2a4..22b1cc9914 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -168,6 +168,26 @@ allows to interface with @file{.ini} files.")
 cryptography C libary for Julia.")
     (license license:expat)))
 
+(define-public julia-parsers
+  (package
+    (name "julia-parsers")
+    (version "0.3.11")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaData/Parsers.jl")
+             (commit (string-append "v" version))))
+       (file-name "Parsers")
+       (sha256
+        (base32 "07dgcy12206a3lw55h00znq3yq4faczng6bbdn3lhc0l6jmclsly"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaData/Parsers.jl")
+    (synopsis "Fast parsing machinery for basic types in Julia")
+    (description "@code{Parsers} is a collection of type parsers and utilities
+for Julia")
+    (license license:expat)))
+
 (define-public julia-sha
   (package
     (name "julia-sha")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #12: 0011-gnu-Add-julia-offsetarrays.patch --]
[-- Type: text/x-patch, Size: 1674 bytes --]

From 68f095c392924936f59c7df9ec2363f6054651ab Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:51:21 +0100
Subject: [PATCH 11/16] gnu: Add julia-offsetarrays.

* gnu/packages/julia-xyz.scm (julia-offsetarrays): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 22b1cc9914..5cc7529c20 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -168,6 +168,30 @@ allows to interface with @file{.ini} files.")
 cryptography C libary for Julia.")
     (license license:expat)))
 
+(define-public julia-offsetarrays
+  (package
+    (name "julia-offsetarrays")
+    (version "1.0.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaArrays/OffsetArrays.jl")
+             (commit (string-append "v" version))))
+       (file-name "OffsetArrays")
+       (sha256
+        (base32 "0x86px7gynyzqqwan88z3lkq8yj0id4pa718l8xqj4yp9fbz440c"))))
+    (build-system julia-build-system)
+    ;; tests require Catindices, introducing a circular dependency
+    (arguments '(#:tests? #f))
+    (home-page "https://github.com/JuliaArrays/OffsetArrays.jl")
+    (synopsis "Fortran-like arrays with arbitrary, zero or negative starting
+indices")
+    (description "OffsetArrays provides Julia users with arrays that have
+arbitrary indices, similar to those found in some other programming languages
+like Fortran.")
+    (license license:expat)))
+
 (define-public julia-parsers
   (package
     (name "julia-parsers")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #13: 0012-gnu-Add-julia-fixedpointnumbers.patch --]
[-- Type: text/x-patch, Size: 1924 bytes --]

From 3a0f60d4e21dd893ee11ddde0947c0323c9b5537 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:54:30 +0100
Subject: [PATCH 12/16] gnu: Add julia-fixedpointnumbers.

* gnu/packages/julia-xyz.scm (julia-fixedpointnumbers): New variable.
---
 gnu/packages/julia-xyz.scm | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 5cc7529c20..046c365b08 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -96,6 +96,32 @@ provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
 
+(define-public julia-fixedpointnumbers
+  (package
+    (name "julia-fixedpointnumbers")
+    (version "0.8.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaMath/FixedPointNumbers.jl")
+             (commit (string-append "v" version))))
+       (file-name "FixedPointNumbers")
+       (sha256
+        (base32 "0zi0va64vhnhqga62j7116m5alrkfzlv7qady4bq6v9sfrwfzvw1"))))
+    (build-system julia-build-system)
+    (propagated-inputs `(("julia-compat" ,julia-compat)))
+    (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
+    (synopsis "Fixed point types for julia")
+    (description "This library implements fixed-point number types.  A
+fixed-point number represents a fractional, or non-integral, number.  In
+contrast with the more widely known floating-point numbers, with fixed-point
+numbers the decimal point doesn't \"float\": fixed-point numbers are
+effectively integers that are interpreted as being scaled by a constant
+factor.  Consequently, they have a fixed number of digits (bits) after the
+decimal (radix) point.")
+    (license license:expat)))
+
 (define-public julia-inifile
   (package
     (name "julia-inifile")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #14: 0013-gnu-Add-julia-orderedcollections.patch --]
[-- Type: text/x-patch, Size: 1797 bytes --]

From 8582ad38d348dae41be96b5c9ff9512748c6ee7b Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 16:08:00 +0100
Subject: [PATCH 13/16] gnu: Add julia-orderedcollections.

* gnu/packages/julia-xyz.scm (julia-orderedcollections): New variable.
---
 gnu/packages/julia-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 046c365b08..797c61ce6f 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -218,6 +218,30 @@ arbitrary indices, similar to those found in some other programming languages
 like Fortran.")
     (license license:expat)))
 
+(define-public julia-orderedcollections
+  (package
+    (name "julia-orderedcollections")
+    (version "1.1.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaCollections/OrderedCollections.jl")
+             ;; They added Package.toml after the 1.1.0 tag
+             (commit "7a789d72a40f4c446f59575f5d77a63df4391a24")))
+       (file-name "OrderedCollections")
+       (sha256
+        (base32 "09b3mlzkxcbc8wn0pji73591865li07q4kvvfzn9x4256mw47riq"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaCollections/OrderedCollections.jl")
+    (synopsis "Julia implementation of associative containers that preserve
+insertion order")
+    (description "This package implements OrderedDicts and OrderedSets, which
+are similar to containers in base Julia.  However, during iteration the
+Ordered* containers return items in the order in which they were added to the
+collection.")
+    (license license:expat)))
+
 (define-public julia-parsers
   (package
     (name "julia-parsers")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #15: 0014-gnu-Add-julia-datastructures.patch --]
[-- Type: text/x-patch, Size: 2152 bytes --]

From 3b122c28d94bd0bdd149a0e7d1031d81bc85face Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 16:08:25 +0100
Subject: [PATCH 14/16] gnu: Add julia-datastructures.

* gnu/packages/julia-xyz.scm (julia-datastructures): New variable.
---
 gnu/packages/julia-xyz.scm | 43 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 797c61ce6f..a4a9939894 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -96,6 +96,49 @@ provides a macro that lets you use the latest syntax in a backwards-compatible
 way.")
     (license license:expat)))
 
+(define-public julia-datastructures
+  (package
+    (name "julia-datastructures")
+    (version "0.17.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaCollections/DataStructures.jl")
+             (commit (string-append "v" version))))
+       (file-name "DataStructures")
+       (sha256
+        (base32 "1gp5n99c1llwp2zfsh1iw9jr5hhjswrq7v8iwkp2vj7yp5vvy5lw"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     `(("julia-orderedcollections" ,julia-orderedcollections)))
+    (home-page "https://github.com/JuliaCollections/DataStructures.jl")
+    (synopsis "Julia implementation of Data structures")
+    (description "This package implements a variety of data structures,
+including:
+
+@enumerate
+@item Deque (implemented with an unrolled linked list)
+@item CircularBuffer
+@item CircularDeque
+@item Stack
+@item Queue
+@item Accumulators and Counters (i.e. Multisets / Bags)
+@item Disjoint Sets
+@item Binary Heap
+@item Mutable Binary Heap
+@item Ordered Dicts and Sets
+@item Dictionaries with Defaults
+@item Trie
+@item Linked List and Mutable Linked List
+@item Sorted Dict, Sorted Multi-Dict and Sorted Set
+@item DataStructures.IntSet
+@item Priority Queue
+@item Fenwick Tree
+@item SparseIntSet
+@end enumerate")
+    (license license:expat)))
+
 (define-public julia-fixedpointnumbers
   (package
     (name "julia-fixedpointnumbers")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #16: 0015-gnu-Add-julia-json.patch --]
[-- Type: text/x-patch, Size: 1739 bytes --]

From e29caaaf651b750f8fcc734dab06921c81f4b226 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 16:09:38 +0100
Subject: [PATCH 15/16] gnu: Add julia-json.

* gnu/packages/julia-xyz.scm (julia-json): New variable.
---
 gnu/packages/julia-xyz.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index a4a9939894..5130663e48 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -185,6 +185,31 @@ decimal (radix) point.")
 allows to interface with @file{.ini} files.")
     (license license:expat)))
 
+(define-public julia-json
+  (package
+    (name "julia-json")
+    (version "0.21.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaIO/JSON.jl")
+             (commit (string-append "v" version))))
+       (file-name "JSON")
+       (sha256
+        (base32 "0knmfjhchd3ggy86dsfyb7l4v3fv5dcr207cgp54mj7rj96caqsm"))))
+    (build-system julia-build-system)
+    (propagated-inputs `(("julia-parsers" ,julia-parsers)))
+    ;; For some reason, the precompile cache for this package is broken,
+    ;; meaning that it will get re-generated at `using'
+    (inputs `(("julia-offsetarrays" ,julia-offsetarrays)
+              ("julia-datastructures" ,julia-datastructures)
+              ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)))
+    (home-page "https://github.com/JuliaIO/JSON.jl")
+    (synopsis "JSON parsing and printing in Julia")
+    (description "Parsing and printing JSON in pure Julia.")
+    (license license:expat)))
+
 (define-public julia-mbedtls
   (package
     (name "julia-mbedtls")
-- 
2.25.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #17: 0016-gnu-Add-julia-http.patch --]
[-- Type: text/x-patch, Size: 2457 bytes --]

From 238554a69cab1f7b1eedb93d453e78587b0e4597 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 16:37:10 +0100
Subject: [PATCH 16/16] gnu: Add julia-http.

* gnu/packages/julia-xyz.scm (julia-http): New variable.
---
 gnu/packages/julia-xyz.scm | 45 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 5130663e48..be3c776f49 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -165,6 +165,51 @@ factor.  Consequently, they have a fixed number of digits (bits) after the
 decimal (radix) point.")
     (license license:expat)))
 
+(define-public julia-http
+  (package
+    (name "julia-http")
+    (version "0.8.9")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/JuliaWeb/HTTP.jl")
+             (commit (string-append "v" version))))
+       (file-name "HTTP")
+       (sha256
+        (base32 "11g49gnnacvmihnr0p3inqmsdw6wllyfkq5sbka09mwnrf3vahs7"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'disable-network-tests
+           (lambda _
+             (substitute* "test/runtests.jl"
+               (("\"client.jl") "# \"client.jl")
+               (("\"multipart.jl") "# \"multipart.jl")
+               (("\"aws4.jl") "# \"as4.jl")
+               ;; some of those might still be saved
+               (("\"async.jl") "# \"async.jl")
+               (("\"server.jl") "# \"server.jl"))
+             (substitute* "test/websockets.jl"
+               (("for s in socket_type") "for s in []"))
+             (substitute* "test/messages.jl"
+               (("@testset \"Read methods\" ") "return\n"))
+             #t)))))
+    (propagated-inputs
+     `(("julia-inifile" ,julia-inifile)
+       ("julia-mbedtls" ,julia-mbedtls)
+       ("julia-compat" ,julia-compat)))
+    ;; required for tests
+    (inputs
+     `(("julia-json" ,julia-json)
+       ("julia-bufferedstreams" ,julia-bufferedstreams)))
+    (home-page "https://juliaweb.github.io/HTTP.jl/")
+    (synopsis "HTTP support for Julia")
+    (description "@code{HTTP.jl} is a Julia library for HTTP Messages,
+implementing both a client and a server.")
+    (license license:expat)))
+
 (define-public julia-inifile
   (package
     (name "julia-inifile")
-- 
2.25.0


[-- Attachment #18: Type: text/plain, Size: 448 bytes --]


Thanks, Nicolò

>
> On Tue, 11 Feb 2020 at 18:58, zimoun <zimon.toutoune@gmail.com> wrote:
>>
>> Hi,
>>
>> Please find attach the almost updated julia using 2 patches. The first
>> add a dependency and the second update and patch.
>>
>> I hope that I do not screw up the indentation; sometimes my Emacs does
>> weird stuff. Anyway.
>>
>> If it is fine with you, please ping Ludo or any committer. :-)
>>
>>
>> Cheers,
>> simon

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done
  2020-02-24 20:59       ` Nicolò Balzarotti
@ 2020-02-25 16:12         ` zimoun
  2020-02-25 18:08           ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: zimoun @ 2020-02-25 16:12 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: 38546

Hi Nicolò,

On Mon, 24 Feb 2020 at 21:59, Nicolò Balzarotti <anothersms@gmail.com> wrote:

> Here's a friendly 1.3.1 + HTTP.jl + dependencies patch submission.
> Hopefully this time it's fine.  Package precompilation should be working
> now (except json, whose cache, for some reason, is not valid and gets
> rebuilt).

Cool! Thank you.
I would like to first push 1.3.1, i.e., the patches v4.

Then let open another bug report with the patches attached here.
Otherwise, it seems a non-ending process. ;-)


About processing, if you use Magit to generate your patches, do not
forget to increment the reroll-count (W c C-m v) otherwise "git
format-patch -v5". It eases to know which version of the patches we
are talking about. For example, here it is the fifth.


> As a reminder: determinism is still not addressed and will be fixed in
> the 1.4.0 release (hopefully, upstream is still not that responsive).
> However, there are dozens of julia packages that I want to package, so
> if this first batch is finally fine, more will come.

Yes, hope soon. :-)


Cheers,
simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done
  2020-02-25 16:12         ` zimoun
@ 2020-02-25 18:08           ` Nicolò Balzarotti
  2020-02-26 12:32             ` [bug#38546] [PATCH v5] Julia: Update to 1.3.1 Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-02-25 18:08 UTC (permalink / raw)
  To: zimoun; +Cc: 38546

zimoun <zimon.toutoune@gmail.com> writes:

> Hi Nicolò,
>
> On Mon, 24 Feb 2020 at 21:59, Nicolò Balzarotti <anothersms@gmail.com> wrote:
>
>> Here's a friendly 1.3.1 + HTTP.jl + dependencies patch submission.
>> Hopefully this time it's fine.  Package precompilation should be working
>> now (except json, whose cache, for some reason, is not valid and gets
>> rebuilt).
>
> Cool! Thank you.
> I would like to first push 1.3.1, i.e., the patches v4.
>
OOk
> Then let open another bug report with the patches attached here.
> Otherwise, it seems a non-ending process. ;-)
>
>
> About processing, if you use Magit to generate your patches, do not
> forget to increment the reroll-count (W c C-m v) otherwise "git
> format-patch -v5". It eases to know which version of the patches we
> are talking about. For example, here it is the fifth.
>
Thanks! Didn't know about it. Should I re-submit them with the v5 prefix?
>
>> As a reminder: determinism is still not addressed and will be fixed in
>> the 1.4.0 release (hopefully, upstream is still not that responsive).
>> However, there are dozens of julia packages that I want to package, so
>> if this first batch is finally fine, more will come.
>
> Yes, hope soon. :-)
>
Nicolò
>
> Cheers,
> simon

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-02-25 18:08           ` Nicolò Balzarotti
@ 2020-02-26 12:32             ` Nicolò Balzarotti
  2020-03-16 10:06               ` Efraim Flashner
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-02-26 12:32 UTC (permalink / raw)
  To: zimoun; +Cc: 38546

[-- Attachment #1: Type: text/plain, Size: 224 bytes --]

Hi,

v5 of the Julia 1.3.1 update patch.

This patch updates julia to 1.3.1.  According to previous simon email,
fixes to julia build system and julia package submissions will be done
separately.

Thanks, Nicolò


[-- Attachment #2: v5-0001-gnu-Add-dsfmt.patch --]
[-- Type: text/x-patch, Size: 4201 bytes --]

From aa02b06ade12613f81ddc0415fb0eecffb808352 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:06:28 +0100
Subject: [PATCH v5 1/2] gnu: Add dsfmt.

* gnu/packages/maths.scm (dsfmt): New variable.
---
 gnu/packages/maths.scm | 72 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 10071c10d5..1c55334a7d 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -33,6 +33,7 @@
 ;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
 ;;; Copyright © 2019 Robert Smith <robertsmith@posteo.net>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -373,6 +374,77 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dsfmt
+  (package
+    (name "dsfmt")
+    (version "2.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append
+         "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-"
+         version ".tar.gz"))
+       (sha256
+        (base32
+         "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))
+       ;; julia needs those (and is the only program depending on dsfmt now)
+       (patches
+        (list
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.c.patch"))
+           (sha256 (base32
+                    "09mhv11bms8jsmkmdqvlcgljwhzw3b6n9nncpi2b6dla9798hw2y"))
+           (file-name "dSFMT.c.patch"))
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.h.patch"))
+           (sha256 (base32
+                    "1py5rd0yxic335lzka23f6x2dhncrpizpyrk57gi2f28c0p98y5n"))
+           (file-name "dSFMT.h.patch"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'build
+           ;; upstream Makefile does not build a shared library
+           (lambda _
+             (invoke
+              "gcc"
+              ;; flags copied from julia
+              ;; https://github.com/JuliaLang/julia/blob/v1.3.0/deps/dsfmt.mk
+              "-DNDEBUG" "-DDSFMT_MEXP=19937"
+              "-fPIC" "-DDSFMT_DO_NOT_USE_OLD_NAMES"
+              "-O3" "-finline-functions" "-fomit-frame-pointer"
+              "-fno-strict-aliasing" "--param" "max-inline-insns-single=1800"
+              "-Wmissing-prototypes" "-Wall" "-std=c99" "-shared" "dSFMT.c"
+              "-o" "libdSFMT.so")))
+         (replace 'install              ;no "install" target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((lib (string-append (assoc-ref outputs "out")
+                                       "/lib"))
+                   (inc (string-append (assoc-ref outputs "out")
+                                       "/include")))
+               (install-file "libdSFMT.so" lib)
+               (install-file "dSFMT.h" inc)
+               #t))))))
+    (synopsis "Double precision SIMD-oriented Fast Mersenne Twister")
+    (description
+     "The dSMFT package speeds up Fast Mersenne Twister generation by avoiding
+the expensive conversion of integer to double (floating point).  dSFMT directly
+generates double precision floating point pseudorandom numbers which have the
+IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
+format.  dSFMT is only available on the CPUs which use IEEE 754 format double
+precision floating point numbers.")
+    (home-page "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/")
+    (license license:bsd-3)))
+
 (define-public gsl
   (package
     (name "gsl")
-- 
2.25.0


[-- Attachment #3: v5-0002-gnu-julia-Update-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 27154 bytes --]

From 76584b9e84ee988d038a1f6ad61333207353e001 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 24 Feb 2020 15:07:27 +0100
Subject: [PATCH v5 2/2] gnu: julia: Update to 1.3.1.

* gnu/packages/julia.scm (julia): Update to 1.3.1.
* gnu/packages/julia.scm (libuv-julia): Update to 2.0.0.
* gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch: New file.
* gnu/local.mk: Add julia-SOURCE_DATE_EPOCH-mtime.patch.
* gnu/packages/julia.scm (llvm-patch, llvm-patch-url): Rename to...
(julia-patch, llvm-patch-rul): ... these.
---
 gnu/local.mk                                  |   2 +
 gnu/packages/julia.scm                        | 348 +++++++++---------
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       |  22 ++
 3 files changed, 188 insertions(+), 184 deletions(-)
 create mode 100644 gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 1f7cad9d32..c2273d5745 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -26,6 +26,7 @@
 # Copyright © 2019 Evan Straw <evan.straw99@gmail.com>
 # Copyright © 2019 Brett Gilio <brettg@gnu.org>
 # Copyright © 2019 Amin Bandali <mab@gnu.org>
+# Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 #
 # This file is part of GNU Guix.
 #
@@ -1038,6 +1039,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..74d214930e 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,18 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
-    ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
+    ;; When upgrading Julia, also upgrade this.  Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +65,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,14 +74,37 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
+(define libunwind-julia
+  ;; The Julia projects requires their patched version.
+  ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+       (patches
+        (list
+         (julia-patch "libunwind-prefer-extbl"
+                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+         (julia-patch "libunwind-static-arm"
+                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (home-page "https://github.com/JuliaLang/tree/master/deps/")))
+
+(define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
+                 "/deps/patches/" name ".patch"))
 
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
+	    (uri (julia-patch-url version name))
 	    (sha256 (base32 sha))
 	    (file-name name))))
 
@@ -98,41 +123,44 @@
               ;; but they are required to build Julia.
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
-               (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-6.0-D44650"
+                       "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm-6.0-NVPTX-addrspaces"
+                       "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                     '("llvm-6.0.0_D27296-libssp"
+                       "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm-D34078-vectorize-fdiv"
+                       "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                     '("llvm-D42262-jumpthreading-not-i1"
+                       "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                     '("llvm-D44892-Perf-integration"
+                       "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                     '("llvm-D46460"
+                       "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                     '("llvm-D49832-SCEVPred"
+                       "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                     '("llvm-D50010-VNCoercion-ni"
+                       "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                     '("llvm-D50167-scev-umin"
+                       "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                     '("llvm-OProfile-line-num"
+                       "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                     '("llvm-PPC-addrspaces"
+                       "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                     '("llvm-rL323946-LSRTy"
+                       "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                     '("llvm-rL326967-aligned-load"
+                       "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                     '("llvm-rL327898"
+                       "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
@@ -158,7 +186,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +194,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +218,25 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
 
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +258,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +271,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,39 +289,50 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-before 'build 'fix-precompile
+           (lambda _
+             (substitute* "base/loading.jl"
+               (("something(Base.active_project(), \"\")") "\"\""))
              #t))
          (add-before 'check 'disable-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
-	     #t)))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",
+                                          \"stress\",\"precompile\",
+                                          \"client\",\"stacktraces\"]),
+                                       testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
+             #t))
+	 (add-after 'install 'make-wrapper
+	   (lambda* (#:key inputs outputs #:allow-other-keys)
+	     (let* ((out (assoc-ref outputs "out"))
+		    (bin (string-append out "/bin"))
+		    (program "julia"))
+	       (with-directory-excursion bin
+		 (wrap-program program
+		   `("JULIA_LOAD_PATH" ":" prefix
+		     ("" "$JULIA_LOAD_PATH")))
+		 (wrap-program program
+		   `("JULIA_DEPOT_PATH" ":" prefix
+		     ("" "$JULIA_DEPOT_PATH"))))
+	       #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -346,25 +350,20 @@
            (_ "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.
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -390,11 +389,16 @@
 	"USE_SYSTEM_MPFR=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
-
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +407,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +422,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -466,16 +451,8 @@
                                        ".tar.gz"))
 	     (sha256
 	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
@@ -485,7 +462,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
new file mode 100644
index 0000000000..b60f284923
--- /dev/null
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -0,0 +1,22 @@
+Fix one of upstream non-determinism, tracked here:
+
+https://github.com/JuliaLang/julia/issues/34115
+https://github.com/JuliaLang/julia/issues/25900
+
+
+Patch by Nicoló Balzarotti <nicolo@nixo.xyz>.
+
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++          push!(_require_dependencies,
++                (mod, path,
++                 haskey(ENV, "SOURCE_DATE_EPOCH") ?
++                 parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
-- 
2.25.0


[-- Attachment #4: Type: text/plain, Size: 1384 bytes --]



Nicolò Balzarotti <anothersms@gmail.com> writes:

> zimoun <zimon.toutoune@gmail.com> writes:
>
>> Hi Nicolò,
>>
>> On Mon, 24 Feb 2020 at 21:59, Nicolò Balzarotti <anothersms@gmail.com> wrote:
>>
>>> Here's a friendly 1.3.1 + HTTP.jl + dependencies patch submission.
>>> Hopefully this time it's fine.  Package precompilation should be working
>>> now (except json, whose cache, for some reason, is not valid and gets
>>> rebuilt).
>>
>> Cool! Thank you.
>> I would like to first push 1.3.1, i.e., the patches v4.
>>
> OOk
>> Then let open another bug report with the patches attached here.
>> Otherwise, it seems a non-ending process. ;-)
>>
>>
>> About processing, if you use Magit to generate your patches, do not
>> forget to increment the reroll-count (W c C-m v) otherwise "git
>> format-patch -v5". It eases to know which version of the patches we
>> are talking about. For example, here it is the fifth.
>>
> Thanks! Didn't know about it. Should I re-submit them with the v5 prefix?
>>
>>> As a reminder: determinism is still not addressed and will be fixed in
>>> the 1.4.0 release (hopefully, upstream is still not that responsive).
>>> However, there are dozens of julia packages that I want to package, so
>>> if this first batch is finally fine, more will come.
>>
>> Yes, hope soon. :-)
>>
> Nicolò
>>
>> Cheers,
>> simon

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-02-26 12:32             ` [bug#38546] [PATCH v5] Julia: Update to 1.3.1 Nicolò Balzarotti
@ 2020-03-16 10:06               ` Efraim Flashner
  2020-03-17  7:51                 ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: Efraim Flashner @ 2020-03-16 10:06 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 761 bytes --]

The upgrade of libgit2 to 0.99.0 seems to have broken this

julia bin/install_packages.jl
Activating environment at `~/workspace/LMGPU.jl/Project.toml`
   Cloning default registries into `~/.julia`
   Cloning registry from "https://github.com/JuliaRegistries/General.git"
ERROR: LoadError: failed to clone from https://github.com/JuliaRegistries/General.git, error: GitError(Code:ERROR, Class:Invalid, invalid version 0 on git_proxy_options)

Other bug reports from other libgit2 version bumps suggest using an
older version of libgit2


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-16 10:06               ` Efraim Flashner
@ 2020-03-17  7:51                 ` Nicolò Balzarotti
  2020-03-17  8:12                   ` Efraim Flashner
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-03-17  7:51 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 38546, zimoun

Hi Efraim, thanks for the report.

Yes, according to this report[1] we should downgrade libgit2 0.99.  I'll
try to send an updated patch in the next days.

In the meanwhile, reding arch bug-tracker [2] I saw that libgit2 depends
on http-parser (USE_HTTP_PARSER).  Should we unbundle it from git?

Thanks, Nicolò

[1] https://github.com/JuliaLang/julia/issues/33111
[2] https://bugs.archlinux.org/task/65540



Efraim Flashner <efraim@flashner.co.il> writes:

> The upgrade of libgit2 to 0.99.0 seems to have broken this
>
> julia bin/install_packages.jl
> Activating environment at `~/workspace/LMGPU.jl/Project.toml`
>    Cloning default registries into `~/.julia`
>    Cloning registry from "https://github.com/JuliaRegistries/General.git"
> ERROR: LoadError: failed to clone from https://github.com/JuliaRegistries/General.git, error: GitError(Code:ERROR, Class:Invalid, invalid version 0 on git_proxy_options)
>
> Other bug reports from other libgit2 version bumps suggest using an
> older version of libgit2
>
>
> -- 
> Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-17  7:51                 ` Nicolò Balzarotti
@ 2020-03-17  8:12                   ` Efraim Flashner
  2020-03-17 12:21                     ` Marius Bakke
  0 siblings, 1 reply; 54+ messages in thread
From: Efraim Flashner @ 2020-03-17  8:12 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 1862 bytes --]

On Tue, Mar 17, 2020 at 08:51:13AM +0100, Nicolò Balzarotti wrote:
> Hi Efraim, thanks for the report.
> 
> Yes, according to this report[1] we should downgrade libgit2 0.99.  I'll
> try to send an updated patch in the next days.

We can just add a libgit2-0.28 for now and remove it later.

I saw that there were patches for using llvm-8 as a base for llvm-julia
instead of llvm-6, but that can wait until later.

> 
> In the meanwhile, reding arch bug-tracker [2] I saw that libgit2 depends
> on http-parser (USE_HTTP_PARSER).  Should we unbundle it from git?

That sounds like a separate issue, but a good idea.

> 
> Thanks, Nicolò
> 
> [1] https://github.com/JuliaLang/julia/issues/33111
> [2] https://bugs.archlinux.org/task/65540
> 
> 
> 
> Efraim Flashner <efraim@flashner.co.il> writes:
> 
> > The upgrade of libgit2 to 0.99.0 seems to have broken this
> >
> > julia bin/install_packages.jl
> > Activating environment at `~/workspace/LMGPU.jl/Project.toml`
> >    Cloning default registries into `~/.julia`
> >    Cloning registry from "https://github.com/JuliaRegistries/General.git"
> > ERROR: LoadError: failed to clone from https://github.com/JuliaRegistries/General.git, error: GitError(Code:ERROR, Class:Invalid, invalid version 0 on git_proxy_options)
> >
> > Other bug reports from other libgit2 version bumps suggest using an
> > older version of libgit2
> >
> >
> > -- 
> > Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
> > GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> > Confidentiality cannot be guaranteed on emails sent or received unencrypted

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-17  8:12                   ` Efraim Flashner
@ 2020-03-17 12:21                     ` Marius Bakke
  2020-03-17 13:37                       ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: Marius Bakke @ 2020-03-17 12:21 UTC (permalink / raw)
  To: Efraim Flashner, Nicolò Balzarotti; +Cc: 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 523 bytes --]

Efraim Flashner <efraim@flashner.co.il> writes:

>> In the meanwhile, reding arch bug-tracker [2] I saw that libgit2 depends
>> on http-parser (USE_HTTP_PARSER).  Should we unbundle it from git?
>
> That sounds like a separate issue, but a good idea.

We used to unbundle it up until libgit2 0.99.0, because the release
notes said that their fork is incompatible with the released version of
http-parser.

We should look into what the compatibility issues are before unbundling
it again.  Maybe it's not relevant for Guix.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-17 12:21                     ` Marius Bakke
@ 2020-03-17 13:37                       ` Nicolò Balzarotti
  2020-03-19 12:28                         ` Marius Bakke
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-03-17 13:37 UTC (permalink / raw)
  To: Marius Bakke, Efraim Flashner; +Cc: 38546, zimoun

Hi,

I looked at it.  THe patch is literally a one-line change[1] they make
to support RFC 3986.  According to [2], the patch has been ported to
fedora http-parser.  Our version is different form the one bundled in
libgit2, but deleting the corresponding line (see snippet) libgit2 tests
are now passing.  However, this http-parser test is failing:

*** http_parser_parse_url("http://hostname:/") "proxy empty port" test failed, unexpected rv 0 ***

I opened an issue upstream here [3] so that if they fix it we can
continue unbundling it without having to patch it ourselves.

Hope they decide to upstream it

I'll send updates if there are news on the issue,
thanks, Nicolò.



#+name: http-parser.patch
#+begin_src diff
diff -u a/http_parser.c b/http_parser.c
--- a/http_parser.c	2020-03-17 14:05:53.542832960 +0100
+++ b/http_parser.c	2020-03-17 14:05:21.810382406 +0100
@@ -2394,7 +2394,6 @@
     case s_http_host_v6_zone_start:
     case s_http_host_v6_zone:
-    case s_http_host_port_start:
     case s_http_userinfo:
     case s_http_userinfo_start:
       return 1;
     default:
#+end_src

[1] https://github.com/libgit2/libgit2/commit/1bbdec69bef50208f77f0c4cbac7c6b56c35973f.patch
[2] https://github.com/libgit2/libgit2/issues/5436#issuecomment-593773122
[3] https://github.com/nodejs/http-parser/issues/501

Marius Bakke <mbakke@fastmail.com> writes:

> Efraim Flashner <efraim@flashner.co.il> writes:
>
>>> In the meanwhile, reding arch bug-tracker [2] I saw that libgit2 depends
>>> on http-parser (USE_HTTP_PARSER).  Should we unbundle it from git?
>>
>> That sounds like a separate issue, but a good idea.
>
> We used to unbundle it up until libgit2 0.99.0, because the release
> notes said that their fork is incompatible with the released version of
> http-parser.
>
> We should look into what the compatibility issues are before unbundling
> it again.  Maybe it's not relevant for Guix.

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-17 13:37                       ` Nicolò Balzarotti
@ 2020-03-19 12:28                         ` Marius Bakke
  2020-04-06  6:09                           ` Efraim Flashner
  0 siblings, 1 reply; 54+ messages in thread
From: Marius Bakke @ 2020-03-19 12:28 UTC (permalink / raw)
  To: Nicolò Balzarotti, Efraim Flashner; +Cc: 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 969 bytes --]

Nicolò Balzarotti <anothersms@gmail.com> writes:

> Hi,
>
> I looked at it.  THe patch is literally a one-line change[1] they make
> to support RFC 3986.  According to [2], the patch has been ported to
> fedora http-parser.  Our version is different form the one bundled in
> libgit2, but deleting the corresponding line (see snippet) libgit2 tests
> are now passing.  However, this http-parser test is failing:
>
> *** http_parser_parse_url("http://hostname:/") "proxy empty port" test failed, unexpected rv 0 ***
>
> I opened an issue upstream here [3] so that if they fix it we can
> continue unbundling it without having to patch it ourselves.
>
> Hope they decide to upstream it
>
> I'll send updates if there are news on the issue,

Awesome, thank you very much for looking into it.  I have no objections
to taking the patches from the upstream PR [0] if that helps updating
Julia.  :-)

0: https://github.com/nodejs/http-parser/pull/483

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-03-19 12:28                         ` Marius Bakke
@ 2020-04-06  6:09                           ` Efraim Flashner
  2020-04-06  8:18                             ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: Efraim Flashner @ 2020-04-06  6:09 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Marius Bakke, 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 1322 bytes --]

On Thu, Mar 19, 2020 at 01:28:09PM +0100, Marius Bakke wrote:
> Nicolò Balzarotti <anothersms@gmail.com> writes:
> 
> > Hi,
> >
> > I looked at it.  THe patch is literally a one-line change[1] they make
> > to support RFC 3986.  According to [2], the patch has been ported to
> > fedora http-parser.  Our version is different form the one bundled in
> > libgit2, but deleting the corresponding line (see snippet) libgit2 tests
> > are now passing.  However, this http-parser test is failing:
> >
> > *** http_parser_parse_url("http://hostname:/") "proxy empty port" test failed, unexpected rv 0 ***
> >
> > I opened an issue upstream here [3] so that if they fix it we can
> > continue unbundling it without having to patch it ourselves.
> >
> > Hope they decide to upstream it
> >
> > I'll send updates if there are news on the issue,
> 
> Awesome, thank you very much for looking into it.  I have no objections
> to taking the patches from the upstream PR [0] if that helps updating
> Julia.  :-)
> 
> 0: https://github.com/nodejs/http-parser/pull/483

Any news from upstream?


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-04-06  6:09                           ` Efraim Flashner
@ 2020-04-06  8:18                             ` Nicolò Balzarotti
  2020-04-06  8:37                               ` Efraim Flashner
  0 siblings, 1 reply; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-04-06  8:18 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: Marius Bakke, 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 604 bytes --]

Efraim Flashner <efraim@flashner.co.il> writes:

Hi Efraim,

no, AFAIK.

The http-parser PR[1] received a comment 18 days ago, so maybe things are slowly
moving.
Julia issue[2] basically suggest to workaround the problem, while [3]
seems to have a patch for julia 1.4.0 ready.

In the meantime, I'm sending a quick patch that patches our http-parser
with the one applied system-wide by fedora[4].

How was the command to build all packages depending even indirectly from
another package (http-parser in this case)?  I'll build everything and
hope tests will pass.

Thanks, Nicolò



[-- Attachment #2: 0001-gnu-Add-dsfmt.patch --]
[-- Type: text/x-patch, Size: 4225 bytes --]

From da44aeb1810a12d83aafee9db05acb9262e6e880 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= <nicolo@nixo.xyz>
Date: Thu, 2 Apr 2020 08:49:46 +0200
Subject: [PATCH 1/4] gnu: Add dsfmt.

* gnu/packages/maths.scm (dsfmt): New variable.
---
 gnu/packages/maths.scm | 72 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 5e56289682..be2b87a41d 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -35,6 +35,7 @@
 ;;; Copyright © 2019 Robert Smith <robertsmith@posteo.net>
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -375,6 +376,77 @@ semiconductors.")
     (license license:gpl3+)
     (home-page "https://www.gnu.org/software/dionysus/")))
 
+(define-public dsfmt
+  (package
+    (name "dsfmt")
+    (version "2.2.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri
+        (string-append
+         "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/dSFMT-src-"
+         version ".tar.gz"))
+       (sha256
+        (base32
+         "03kaqbjbi6viz0n33dk5jlf6ayxqlsq4804n7kwkndiga9s4hd42"))
+       ;; julia needs those (and is the only program depending on dsfmt now)
+       (patches
+        (list
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.c.patch"))
+           (sha256 (base32
+                    "09mhv11bms8jsmkmdqvlcgljwhzw3b6n9nncpi2b6dla9798hw2y"))
+           (file-name "dSFMT.c.patch"))
+         (origin
+           (method url-fetch)
+           (uri (string-append
+                 "https://raw.githubusercontent.com/JuliaLang/julia/"
+                 "v1.3.0/deps/patches/dSFMT.h.patch"))
+           (sha256 (base32
+                    "1py5rd0yxic335lzka23f6x2dhncrpizpyrk57gi2f28c0p98y5n"))
+           (file-name "dSFMT.h.patch"))))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure script
+         (replace 'build
+           ;; upstream Makefile does not build a shared library
+           (lambda _
+             (invoke
+              "gcc"
+              ;; flags copied from julia
+              ;; https://github.com/JuliaLang/julia/blob/v1.3.0/deps/dsfmt.mk
+              "-DNDEBUG" "-DDSFMT_MEXP=19937"
+              "-fPIC" "-DDSFMT_DO_NOT_USE_OLD_NAMES"
+              "-O3" "-finline-functions" "-fomit-frame-pointer"
+              "-fno-strict-aliasing" "--param" "max-inline-insns-single=1800"
+              "-Wmissing-prototypes" "-Wall" "-std=c99" "-shared" "dSFMT.c"
+              "-o" "libdSFMT.so")))
+         (replace 'install              ;no "install" target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((lib (string-append (assoc-ref outputs "out")
+                                       "/lib"))
+                   (inc (string-append (assoc-ref outputs "out")
+                                       "/include")))
+               (install-file "libdSFMT.so" lib)
+               (install-file "dSFMT.h" inc)
+               #t))))))
+    (synopsis "Double precision SIMD-oriented Fast Mersenne Twister")
+    (description
+     "The dSMFT package speeds up Fast Mersenne Twister generation by avoiding
+the expensive conversion of integer to double (floating point).  dSFMT directly
+generates double precision floating point pseudorandom numbers which have the
+IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std 754-1985)
+format.  dSFMT is only available on the CPUs which use IEEE 754 format double
+precision floating point numbers.")
+    (home-page "http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/")
+    (license license:bsd-3)))
+
 (define-public gsl
   (package
     (name "gsl")
-- 
2.26.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-gnu-http-parser-add-patch-applied-by-libgit2.patch --]
[-- Type: text/x-patch, Size: 1750 bytes --]

From 544ea20e9f7105ee01c274895ab1c4687dc99090 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= <nicolo@nixo.xyz>
Date: Thu, 2 Apr 2020 11:50:27 +0200
Subject: [PATCH 2/4] gnu: http-parser: add patch applied by libgit2.

Fixes parsing of colon followed by empty port, allowed by RFC 3986
specifications.  Fedora is applying it to system http-parser too.
---
 gnu/packages/web.scm | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index a553dc2150..6c73720689 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -5788,6 +5788,20 @@ into your tests.  It automatically starts up a HTTP server in a separate thread
               (uri (git-reference (url home-page)
                                   (commit (string-append "v" version))))
               (file-name (git-file-name name version))
+              (patches
+               ;; When parsing URLs, treat an empty port (eg
+               ;; `http://hostname:/`) as if it were unspecified.  This patch is
+               ;; applied to fedora http-parser and to libgit2 bundled version.
+               (list
+                (origin
+                  (method url-fetch)
+                  (uri (string-append
+                        "https://src.fedoraproject.org/rpms/http-parser/raw/"
+                        "e89b4c4e2874c19079a5a1a2d2ccc61b551aa289/"
+                        "f/0001-url-treat-empty-port-as-default.patch"))
+                  (sha256
+                   (base32
+                    "0pbxf2nq9pcn299k2b2ls8ldghaqln9glnp79gi57mamx4iy0f6g")))))
               (sha256
                (base32
                 "189zi61vczqgmqjd2myjcjbbi5icrk7ccs0kn6nj8hxqiv5j3811"))))
-- 
2.26.0


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: 0003-gnu-libgit2-Use-system-http-parser.patch --]
[-- Type: text/x-patch, Size: 2402 bytes --]

From 2bd301c0e04a182295c4cce973e5b7553c4aa5b4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= <nicolo@nixo.xyz>
Date: Thu, 2 Apr 2020 11:54:15 +0200
Subject: [PATCH 3/4] gnu: libgit2: Use system http-parser.

---
 gnu/packages/version-control.scm | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 8af54c6e35..00fb96f474 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -612,16 +612,13 @@ on @command{git}, and use any regular Git hosting service.")
                (base32
                 "0qxzv49ip378g1n7hrbifb9c6pys2kj1hnxcafmbb94gj3pgd9kg"))
               (patches (search-patches "libgit2-mtime-0.patch"))
-
-              ;; Remove bundled software.  Keep "http-parser" because it
-              ;; contains patches that are not available in the system version.
               (snippet '(begin
                           (with-directory-excursion "deps"
                             (for-each (lambda (dir)
                                         (delete-file-recursively dir))
                                       (lset-difference equal?
                                                        (scandir ".")
-                                                       '("." ".." "http-parser"))))
+                                                       '("." ".."))))
                           #t))
               (modules '((guix build utils)
                          (srfi srfi-1)
@@ -630,7 +627,8 @@ on @command{git}, and use any regular Git hosting service.")
     (outputs '("out" "debug"))
     (arguments
      `(#:configure-flags '("-DUSE_NTLMCLIENT=OFF" ;TODO: package this
-                           "-DREGEX_BACKEND=pcre2")
+                           "-DREGEX_BACKEND=pcre2"
+                           "-DUSE_HTTP_PARSER=system")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'fix-pcre2-reference
@@ -657,7 +655,8 @@ on @command{git}, and use any regular Git hosting service.")
          (replace 'check
            (lambda _ (invoke "./libgit2_clar" "-v" "-Q"))))))
     (inputs
-     `(("libssh2" ,libssh2)))
+     `(("libssh2" ,libssh2)
+       ("http-parser" ,http-parser)))
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("python" ,python)))
-- 
2.26.0


[-- Attachment #5: 0004-gnu-julia-Upgrade-to-1.3.1.patch --]
[-- Type: text/x-patch, Size: 26850 bytes --]

From f01ecb8c6f19180e790cf412b69149ebb6382996 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=B2=20Balzarotti?= <nicolo@nixo.xyz>
Date: Thu, 2 Apr 2020 11:55:20 +0200
Subject: [PATCH 4/4] gnu: julia: Upgrade to 1.3.1.

---
 gnu/local.mk                                  |   2 +
 gnu/packages/julia.scm                        | 348 +++++++++---------
 .../julia-SOURCE_DATE_EPOCH-mtime.patch       |  22 ++
 3 files changed, 188 insertions(+), 184 deletions(-)
 create mode 100644 gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 6c85e6e806..2b8c99ef57 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -28,6 +28,7 @@
 # Copyright © 2019 Amin Bandali <bandali@gnu.org>
 # Copyright © 2020 Brendan Tildesley <mail@brendan.scot>
 # Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
+# Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz
 #
 # This file is part of GNU Guix.
 #
@@ -1053,6 +1054,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/java-xerces-bootclasspath.patch	\
   %D%/packages/patches/java-xerces-build_dont_unzip.patch	\
   %D%/packages/patches/java-xerces-xjavac_taskdef.patch	\
+  %D%/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch	\
   %D%/packages/patches/jbig2dec-ignore-testtest.patch		\
   %D%/packages/patches/jfsutils-add-sysmacros.patch		\
   %D%/packages/patches/jfsutils-include-systypes.patch		\
diff --git a/gnu/packages/julia.scm b/gnu/packages/julia.scm
index 65a5e42beb..74d214930e 100644
--- a/gnu/packages/julia.scm
+++ b/gnu/packages/julia.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -28,6 +29,7 @@
   #:use-module (gnu packages algebra)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages gcc)
   #:use-module (gnu packages llvm)
@@ -43,18 +45,18 @@
   #:use-module (gnu packages textutils)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages version-control)
+  #:use-module (gnu packages ssh)
   #:use-module (gnu packages wget)
   #:use-module (ice-9 match))
 
 (define libuv-julia
-  (let ((commit "26dbe5672c33fc885462c509fe2a9b36f35866fd")
-        (revision "6"))
-    ;; When upgrading Julia, also upgrade this.
-    ;; Get the commit from https://github.com/JuliaLang/julia/blob/v1.1.1/deps/libuv.version
+  (let ((commit "35b1504507a7a4168caae3d78db54d1121b121e1"))
+    ;; When upgrading Julia, also upgrade this.  Get the commit from
+    ;; https://github.com/JuliaLang/julia/blob/v1.3.1/deps/libuv.version
     (package
       (inherit libuv)
       (name "libuv-julia")
-      (version (string-append "1.9.0-" revision "." (string-take commit 8)))
+      (version (string-append "2.0.0" "." (string-take commit 8)))
       (source (origin
                 (method git-fetch)
                 (uri (git-reference
@@ -63,7 +65,7 @@
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "17pn2xmqaramilx897s9grs966i5246gi6sric5alch4g9j4685n"))))
+                  "0dn3v6fdp1z382pqg3nhjzk60l61ky9b65mfgaj29fv2da95rwjs"))))
       (build-system gnu-build-system)
       (arguments
        (substitute-keyword-arguments (package-arguments libuv)
@@ -72,14 +74,37 @@
              (delete 'autogen)))))
       (home-page "https://github.com/JuliaLang/libuv"))))
 
-(define (llvm-patch-url version name)
+(define libunwind-julia
+  ;; The Julia projects requires their patched version.
+  ;; Get from https://github.com/JuliaLang/julia/tree/master/deps/patches
+  (package
+    (inherit libunwind)
+    (name "libunwind-julia")
+    (version "1.3.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://savannah/libunwind/libunwind-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "1y0l08k6ak1mqbfj6accf9s5686kljwgsl4vcqpxzk5n74wpm6a3"))
+       (patches
+        (list
+         (julia-patch "libunwind-prefer-extbl"
+                      "0lr4dafw8qyfh8sw8hhbwkql1dlhqv8px7k81y2l20hhxfgnh2m1")
+         (julia-patch "libunwind-static-arm"
+                      "1jk3bmiw61ypcchqkk1fyg5wh8wpggk574wxyfyaic870zh3lhgq")))))
+    (home-page "https://github.com/JuliaLang/tree/master/deps/")))
+
+(define (julia-patch-url version name)
   (string-append "https://raw.githubusercontent.com/JuliaLang/julia/v" version
-		 "/deps/patches/" name))
+                 "/deps/patches/" name ".patch"))
 
-(define (llvm-patch name sha)
-  (let ((version "1.1.1"))
+(define (julia-patch name sha)
+  (let ((version "1.3.1"))
     (origin (method url-fetch)
-	    (uri (llvm-patch-url version name))
+	    (uri (julia-patch-url version name))
 	    (sha256 (base32 sha))
 	    (file-name name))))
 
@@ -98,41 +123,44 @@
               ;; but they are required to build Julia.
               ;; Discussion: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919628
               (patches
-               (list
-	        (llvm-patch "llvm-6.0-D44650.patch"
-			    "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
-	        (llvm-patch "llvm-6.0-DISABLE_ABI_CHECKS.patch"
-			    "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
-	        (llvm-patch "llvm-6.0-NVPTX-addrspaces.patch"
-			    "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
-	        (llvm-patch "llvm-6.0.0_D27296-libssp.patch"
-			    "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
-	        (llvm-patch "llvm-D27629-AArch64-large_model_6.0.1.patch"
-			    "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
-	        (llvm-patch "llvm-D34078-vectorize-fdiv.patch"
-			    "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
-	        (llvm-patch "llvm-D42262-jumpthreading-not-i1.patch"
-			    "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
-	        (llvm-patch "llvm-D44892-Perf-integration.patch"
-			    "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
-	        (llvm-patch "llvm-D46460.patch"
-			    "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
-	        (llvm-patch "llvm-D49832-SCEVPred.patch"
-			    "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
-	        (llvm-patch "llvm-D50010-VNCoercion-ni.patch"
-			    "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
-	        (llvm-patch "llvm-D50167-scev-umin.patch"
-			    "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
-	        (llvm-patch "llvm-OProfile-line-num.patch"
-			    "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
-	        (llvm-patch "llvm-PPC-addrspaces.patch"
-			    "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
-	        (llvm-patch "llvm-rL323946-LSRTy.patch"
-			    "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
-	        (llvm-patch "llvm-rL326967-aligned-load.patch"
-			    "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
-	        (llvm-patch "llvm-rL327898.patch"
-			    "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq")))))
+               (map (match-lambda
+                      ((name hash)
+                       (julia-patch name hash)))
+                    (list
+                     '("llvm-6.0-D44650"
+                       "1336q4vqayr94wdcnlmcxh90mjdh34dzw9x2cbiqjnx9b1j8fxyb")
+                     '("llvm-6.0-DISABLE_ABI_CHECKS"
+                       "014fawd1ba7yckalypfld22zgic87x9nx3cim42zrwygywd36pyg")
+                     '("llvm-6.0-NVPTX-addrspaces"
+                       "1qdi2zmrjsrj0h84zv2vyly2hjcn4f67mfy0s1q353g4v4jkscqc")
+                     '("llvm-6.0.0_D27296-libssp"
+                       "0s5hi2r1j63i8m6ig1346crx2aiv9f7rgb3mg80kw1wx5y7pdpfh")
+                     '("llvm-D27629-AArch64-large_model_6.0.1"
+                       "1qrshmlqvnasdyc158vfn3hnbigqph3lsq7acb9w8lwkpnnm2j4z")
+                     '("llvm-D34078-vectorize-fdiv"
+                       "1696hg84a0jxcnggvqsc2cdp271hf9a44p4qsd078qm1mfawkaay")
+                     '("llvm-D42262-jumpthreading-not-i1"
+                       "1c8w210gwidbnkkw8anp17dk5pnxws2fl3mb2qxh7y9wzfpixgaq")
+                     '("llvm-D44892-Perf-integration"
+                       "0r37jd0ssh2k1pndkfd5blgpg9z90im4vlzprhb0n0wwz45g4b05")
+                     '("llvm-D46460"
+                       "1miqgswdc0qvbaf4571c2xkxyp9ais06b1bcpa83sq22vr4hbsfb")
+                     '("llvm-D49832-SCEVPred"
+                       "0v5c88hgqj6dymv3j86ca5mhpqab5fbnrvjiw1nvnrnya9l4dlbn")
+                     '("llvm-D50010-VNCoercion-ni"
+                       "0iblb3q1xixwrb12jpb89h3ywmqmzdp6aqp416j4ncwakyjhhfkp")
+                     '("llvm-D50167-scev-umin"
+                       "1f2rakcnnyhr7w10k7gqg0k0491pyvx5ijplivw557f714ys3q6v")
+                     '("llvm-OProfile-line-num"
+                       "1jvbbmwyags0xfwamb13qrf3rgcz9i1r03m9lava7swag8xb78c7")
+                     '("llvm-PPC-addrspaces"
+                       "1f23nhsxh2s3jskbgs7da9nwg3s1hrkbk5aahl08x41wi3mny01p")
+                     '("llvm-rL323946-LSRTy"
+                       "10cz3vy1yw0w643z7xx021wa4kymx9fcm3bjg61s6vzdqd6d9fns")
+                     '("llvm-rL326967-aligned-load"
+                       "04jxnv32yj5x17hqhi8g2p8rhgp38gmjzr871w7z8s44pq10v9v4")
+                     '("llvm-rL327898"
+                       "15ah49gbsll23z28kpyahi5vl0fh3fkxcgd1zmxxdcl96s3x8bnq"))))))
     (arguments
      (substitute-keyword-arguments (package-arguments llvm-6)
        ((#:configure-flags flags)
@@ -158,7 +186,7 @@
 (define-public julia
   (package
     (name "julia")
-    (version "1.1.1")
+    (version "1.3.1")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -166,7 +194,9 @@
                     version "/julia-" version ".tar.gz"))
               (sha256
                (base32
-                "0hk983mywimclgnjc41zmlppm5kfdz2aj85ky07p49ilcqxi998f"))))
+                "1nwkmr9j55g1zkxdchnid1h022s0is52vx23niksshgvh793g41x"))
+              (patches
+               (search-patches "julia-SOURCE_DATE_EPOCH-mtime.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "test"
@@ -188,30 +218,25 @@
          (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")
+             ;; no USE_SYSTEM_{OBJCONV/LIBWHICH}
              (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 "libwhich")
                         (string-append "deps/srccache/libwhich-"
                                        "81e9723c0273d78493dc8c8ed570f68d9ce7e89e"
                                        ".tar.gz"))
-             (copy-file (assoc-ref inputs "rmath")
-                        "deps/srccache/Rmath-julia-0.1.tar.gz")
 
 	     ;; needed by libwhich
 	     (setenv "LD_LIBRARY_PATH"
 		     (string-join (map (lambda (pkg)
                                          (string-append (assoc-ref inputs pkg)
                                                         "/lib"))
-                                       '("arpack-ng" "fftw" "gmp" "lapack"
-			                 "libgit2" "mpfr" "openblas" "openlibm"
-			                 "openspecfun" "pcre2"))
+                                       '("arpack-ng" "curl" "dsfmt"
+                                         "gmp" "lapack"
+                                         "libssh2" "libgit2"
+                                         "mbedtls" "mpfr"
+                                         "openblas" "openlibm" "pcre2"
+                                         "suitesparse"))
                                   ":"))
 	     #t))
          ;; FIXME: Building the documentation requires Julia packages that
@@ -233,44 +258,12 @@
           ;; 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/runtime_ccall.cpp"
-              ;; Patch out invocations of '/sbin/ldconfig' to avoid getting
-              ;; error messages about missing '/sbin/ldconfig' on Guix System.
-              (("popen\\(.*ldconfig.*\\);")
-               "NULL;\n")
-
-              ;; Populate 'sonameMap'.
-              (("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")
-                       ("pcre2"       "libpcre2-8"     "libpcre2-8.so")
-                       ("mpfr"        "libmpfr"        "libmpfr.so")
-                       ("openblas"    "libblas"        "libopenblas.so")
-                       ("arpack-ng"   "libarpack"      "libarpack.so")
-                       ("lapack"      "liblapack"      "liblapack.so")
-                       ("libgit2"     "libgit2"        "libgit2.so")
-                       ("gmp"         "libgmp"         "libgmp.so")
-                       ("openspecfun" "libopenspecfun" "libopenspecfun.so")
-                       ("fftw"        "libfftw3"       "libfftw3_threads.so")
-                       ("fftwf"       "libfftw3f"      "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"
-                              "\"")))
-            #t))
+             (substitute* "base/math.jl"
+               (("const libm = Base.libm_name")
+                (string-append "const libm = \""
+                               (assoc-ref inputs "openlibm")
+                               "/lib/libopenlibm.so"
+                               "\"")))))
          (add-before 'build 'fix-include-and-link-paths
           (lambda* (#:key inputs #:allow-other-keys)
             ;; LIBUTF8PROC is a linker flag, not a build target.  It is
@@ -278,10 +271,10 @@
             ;; collection of build targets and a list of libraries to link
             ;; against.
             (substitute* "src/flisp/Makefile"
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
-               "$(BUILDDIR)/$(EXENAME): $(OBJS) $(LLT_release)")
-              (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug: \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
-               "$(BUILDDIR)/$(EXENAME)-debug: $(DOBJS) $(LLT_debug)"))
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)\\$\\(EXE\\): \\$\\(OBJS\\) \\$\\(LIBFILES_release\\)")
+                "$(BUILDDIR)/$(EXENAME)$(EXE): $(OBJS) $(LLT_release)")
+               (("\\$\\(BUILDDIR\\)/\\$\\(EXENAME\\)-debug$(EXE): \\$\\(DOBJS\\) \\$\\(LIBFILES_debug\\)")
+                "$(BUILDDIR)/$(EXENAME)-debug\\$\\(EXE\\): $(DOBJS) $(LLT_debug)"))
 
             ;; The REPL must be linked with libuv.
             (substitute* "ui/Makefile"
@@ -296,39 +289,50 @@
                               "/include/uv/errno.h")))
             #t))
          (add-before 'build 'replace-default-shell
-          (lambda _
-            (substitute* "base/client.jl"
-              (("/bin/sh") (which "sh")))
-            #t))
-         (add-after 'unpack 'hardcode-paths
            (lambda _
-             (substitute* "stdlib/InteractiveUtils/src/InteractiveUtils.jl"
-               (("`which") (string-append "`" (which "which")))
-               (("`wget")  (string-append "`" (which "wget"))))
+             (substitute* "base/client.jl"
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-before 'build 'fix-precompile
+           (lambda _
+             (substitute* "base/loading.jl"
+               (("something(Base.active_project(), \"\")") "\"\""))
              #t))
          (add-before 'check 'disable-broken-tests
            (lambda _
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-	     ;; FIXME: All git tests works except this one. But *THIS* "fix"
-             ;; is not working, so right now I'm disabling all libgit2.jl tests
-	     ;; (substitute* "stdlib/LibGit2/test/libgit2.jl"
-	     ;; (("!LibGit2.use_http_path(cfg, github_cred)") "true")
-	     ;; (("LibGit2.use_http_path(cfg, mygit_cred)") "true"))
-             (map (lambda (test)
-                    (delete-file test)
-                    (touch test))
-	          '("stdlib/Sockets/test/runtests.jl"
-		    "stdlib/Distributed/test/runtests.jl"
-                    ;; FIXME: see above
-		    "stdlib/LibGit2/test/libgit2.jl"))
-	     (substitute* "test/choosetests.jl"
-	       ;; These tests fail, probably because some of the input
-	       ;; binaries have been stripped and thus backtraces don't look
-	       ;; as expected.
-	       (("\"backtrace\",") "")
-	       (("\"cmdlineargs\",") ""))
-	     #t)))
+             (substitute* "test/choosetests.jl"
+               (("tests = testnames")
+                ;; Those failings are not deterministic.  They depends on the
+                ;; running order.  I think it depends on the number of
+                ;; runners, disabling it for now
+                ;; https://github.com/JuliaLang/julia/issues/34330
+                "tests = filter(e->!in(e,[\"backtrace\",\"exceptions\",
+                                          \"stress\",\"precompile\",
+                                          \"client\",\"stacktraces\"]),
+                                       testnames)"))
+             ;; When HOME is not set, julia calls uv_os_homedir, which in
+             ;; turns call getpwuid_r. Add the HOME env variable to the
+             ;; external julia call to fix this
+             (substitute* "test/cmdlineargs.jl"
+               (("\"JULIA_PROJECT\"") "\"HOME\"=>\"/tmp\", \"JULIA_PROJECT\""))
+             ;; Marking the test as broken as it's a known bug:
+             ;; https://github.com/JuliaLang/julia/issues/32377
+             (substitute* "stdlib/REPL/test/replcompletions.jl"
+               (("@test count") "@test_broken count"))
+             #t))
+	 (add-after 'install 'make-wrapper
+	   (lambda* (#:key inputs outputs #:allow-other-keys)
+	     (let* ((out (assoc-ref outputs "out"))
+		    (bin (string-append out "/bin"))
+		    (program "julia"))
+	       (with-directory-excursion bin
+		 (wrap-program program
+		   `("JULIA_LOAD_PATH" ":" prefix
+		     ("" "$JULIA_LOAD_PATH")))
+		 (wrap-program program
+		   `("JULIA_DEPOT_PATH" ":" prefix
+		     ("" "$JULIA_DEPOT_PATH"))))
+	       #t))))
        #:make-flags
        (list
         (string-append "prefix=" (assoc-ref %outputs "out"))
@@ -346,25 +350,20 @@
            (_ "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.
+        ;; list of "USE_SYSTEM_*" is here:
+        ;; https://github.com/JuliaLang/julia/blob/v1.3.1/Make.inc
+        "USE_SYSTEM_DSFMT=1"
+        "USE_SYSTEM_P7ZIP=1"
         "USE_SYSTEM_LAPACK=1"
         "USE_SYSTEM_BLAS=1"
         "USE_BLAS64=0"          ;needed when USE_SYSTEM_BLAS=1
         "LIBBLAS=-lopenblas"
         "LIBBLASNAME=libopenblas"
 
-        "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_SUITESPARSE=1"
+        (string-append "SUITESPARSE_INC=-I "
+                       (assoc-ref %build-inputs "suitesparse")
+                       "/include")
         "USE_GPL_LIBS=1"        ;proudly
         "USE_SYSTEM_UTF8PROC=1"
         (string-append "UTF8PROC_INC="
@@ -390,11 +389,16 @@
 	"USE_SYSTEM_MPFR=1"
 	"USE_SYSTEM_ARPACK=1"
 	"USE_SYSTEM_LIBGIT2=1"
-	"USE_SYSTEM_ZLIB=1"
-	"USE_SYSTEM_OPENSPECFUN=1")))
+        (string-append "LIBUV="
+                       (assoc-ref %build-inputs "libuv")
+                       "/lib/libuv.so")
+        (string-append "LIBUV_INC="
+                       (assoc-ref %build-inputs "libuv")
+                       "/include")
+        "USE_SYSTEM_ZLIB=1")))
     (inputs
      `(("llvm" ,llvm-julia)
-
+       ("p7zip" ,p7zip)
        ;; The bundled version is 3.3.0 so stick to that version.  With other
        ;; versions, we get test failures in 'linalg/arnoldi' as described in
        ;; <https://bugs.gnu.org/30282>.
@@ -403,12 +407,12 @@
        ("coreutils" ,coreutils) ;for bindings to "mkdir" and the like
        ("lapack" ,lapack)
        ("openblas" ,openblas) ;Julia does not build with Atlas
-       ("libunwind" ,libunwind)
+       ("libunwind" ,libunwind-julia)
        ("openlibm" ,openlibm)
-       ("openspecfun" ,openspecfun)
+       ("mbedtls" ,mbedtls-apache)
+       ("curl" ,curl)
        ("libgit2" ,libgit2)
-       ("fftw" ,fftw)
-       ("fftwf" ,fftwf)
+       ("libssh2" ,libssh2)
        ("fortran" ,gfortran)
        ("libuv" ,libuv-julia)
        ("pcre2" ,pcre2)
@@ -418,31 +422,12 @@
        ("which" ,which)
        ("zlib" ,zlib)
        ("gmp" ,gmp)
-       ("virtualenv" ,python2-virtualenv)
+       ("suitesparse" ,suitesparse)
        ;; 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
-       ;; Find dependency versions here:
-       ;; https://raw.githubusercontent.com/JuliaLang/julia/77a2c1e245c85812dc1c7687540beedecc52758f/deps/Versions.make
-       ("rmath"
-	,(origin
-	   (method git-fetch)
-	   (uri (git-reference
-                 (url "https://github.com/JuliaLang/Rmath-julia")
-                 (commit "v0.1")))
-           (file-name "rmath-julia-0.1-checkout")
-	   (sha256
-	    (base32
-	     "1zkpy0cg5zivq40zbhbdgj9128fqzs2j94wkwih8nc6xaj3gp9p6"))))
-       ("suitesparse"
-        ,(origin
-           (method url-fetch)
-           (uri "http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.5.tar.gz")
-           (sha256
-            (base32
-             "1jcbxb8jx5wlcixzf6n5dca2rcfx6mlcms1k2rl5gp67ay3bix43"))))
+       ;; Find dependencies versions here:
+       ;; https://raw.githubusercontent.com/JuliaLang/julia/v1.3.0/deps/Versions.make
        ("objconv"
         ,(origin
            (method url-fetch)
@@ -466,16 +451,8 @@
                                        ".tar.gz"))
 	     (sha256
 	      (base32
-	       "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
-       ("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"))))))
+               "1p7zg31kpmpbmh1znrk1xrbd074agx13b9q4dcw8n2zrwwdlbz3b")))))
+       ("dsfmt" ,dsfmt)))
     (native-inputs
      `(("openssl" ,openssl)
        ("perl" ,perl)
@@ -485,7 +462,10 @@
     (native-search-paths
      (list (search-path-specification
             (variable "JULIA_LOAD_PATH")
-            (files (list "share/julia/packages/")))))
+            (files (list "share/julia/packages/")))
+           (search-path-specification
+            (variable "JULIA_DEPOT_PATH")
+            (files (list "share/julia/")))))
     ;; Julia is not officially released for ARM and MIPS.
     ;; See https://github.com/JuliaLang/julia/issues/10639
     (supported-systems '("i686-linux" "x86_64-linux" "aarch64-linux"))
diff --git a/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
new file mode 100644
index 0000000000..b60f284923
--- /dev/null
+++ b/gnu/packages/patches/julia-SOURCE_DATE_EPOCH-mtime.patch
@@ -0,0 +1,22 @@
+Fix one of upstream non-determinism, tracked here:
+
+https://github.com/JuliaLang/julia/issues/34115
+https://github.com/JuliaLang/julia/issues/25900
+
+
+Patch by Nicoló Balzarotti <nicolo@nixo.xyz>.
+
+--- a/base/loading.jl
++++ b/base/loading.jl
+@@ -807,7 +807,10 @@
+         path = normpath(joinpath(dirname(prev), _path))
+     end
+     if _track_dependencies[]
+-        push!(_require_dependencies, (mod, path, mtime(path)))
++          push!(_require_dependencies,
++                (mod, path,
++                 haskey(ENV, "SOURCE_DATE_EPOCH") ?
++                 parse(Float64, ENV["SOURCE_DATE_EPOCH"]) : mtime(path)))
+     end
+     return path, prev
+ end
-- 
2.26.0


[-- Attachment #6: Type: text/plain, Size: 1636 bytes --]





[1] https://github.com/nodejs/http-parser/pull/483
[2] https://github.com/JuliaLang/julia/issues/33111
[3] https://github.com/JuliaLang/julia/pull/35232
[4] https://src.fedoraproject.org/rpms/http-parser/c/e89b4c4e2874c19079a5a1a2d2ccc61b551aa289?branch=master

> On Thu, Mar 19, 2020 at 01:28:09PM +0100, Marius Bakke wrote:
>> Nicolò Balzarotti <anothersms@gmail.com> writes:
>> 
>> > Hi,
>> >
>> > I looked at it.  THe patch is literally a one-line change[1] they make
>> > to support RFC 3986.  According to [2], the patch has been ported to
>> > fedora http-parser.  Our version is different form the one bundled in
>> > libgit2, but deleting the corresponding line (see snippet) libgit2 tests
>> > are now passing.  However, this http-parser test is failing:
>> >
>> > *** http_parser_parse_url("http://hostname:/") "proxy empty port" test failed, unexpected rv 0 ***
>> >
>> > I opened an issue upstream here [3] so that if they fix it we can
>> > continue unbundling it without having to patch it ourselves.
>> >
>> > Hope they decide to upstream it
>> >
>> > I'll send updates if there are news on the issue,
>> 
>> Awesome, thank you very much for looking into it.  I have no objections
>> to taking the patches from the upstream PR [0] if that helps updating
>> Julia.  :-)
>> 
>> 0: https://github.com/nodejs/http-parser/pull/483
>
> Any news from upstream?
>
>
> -- 
> Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted

^ permalink raw reply related	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-04-06  8:18                             ` Nicolò Balzarotti
@ 2020-04-06  8:37                               ` Efraim Flashner
  2020-04-06 23:18                                 ` Nicolò Balzarotti
  0 siblings, 1 reply; 54+ messages in thread
From: Efraim Flashner @ 2020-04-06  8:37 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Marius Bakke, 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 1193 bytes --]

On Mon, Apr 06, 2020 at 10:18:25AM +0200, Nicolò Balzarotti wrote:
> Efraim Flashner <efraim@flashner.co.il> writes:
> 
> Hi Efraim,
> 
> no, AFAIK.
> 
> The http-parser PR[1] received a comment 18 days ago, so maybe things are slowly
> moving.
> Julia issue[2] basically suggest to workaround the problem, while [3]
> seems to have a patch for julia 1.4.0 ready.
> 
> In the meantime, I'm sending a quick patch that patches our http-parser
> with the one applied system-wide by fedora[4].
> 
> How was the command to build all packages depending even indirectly from
> another package (http-parser in this case)?  I'll build everything and
> hope tests will pass.
> 
> Thanks, Nicolò
> 

'guix refresh -l http-parser' will list all the packages which depend,
even indirectly, on it. ./pre-inst-env guix build --no-grafts
$(./pre-inst-env guix refresh -l http-parser | cut -f2 -d':') will build
them all if you don't feel like copy-pasting the list.


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-04-06  8:37                               ` Efraim Flashner
@ 2020-04-06 23:18                                 ` Nicolò Balzarotti
  2020-04-07  5:41                                   ` Efraim Flashner
  2020-04-07 14:35                                   ` bug#38546: " Efraim Flashner
  0 siblings, 2 replies; 54+ messages in thread
From: Nicolò Balzarotti @ 2020-04-06 23:18 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: Marius Bakke, 38546, zimoun

Hello again, the build completed right now.

Efraim Flashner <efraim@flashner.co.il> writes:

> On Mon, Apr 06, 2020 at 10:18:25AM +0200, Nicolò Balzarotti wrote:
>> Efraim Flashner <efraim@flashner.co.il> writes:
>> 
>> Hi Efraim,
>> 
>> no, AFAIK.
>> 
>> The http-parser PR[1] received a comment 18 days ago, so maybe things are slowly
>> moving.
>> Julia issue[2] basically suggest to workaround the problem, while [3]
>> seems to have a patch for julia 1.4.0 ready.
>> 
>> In the meantime, I'm sending a quick patch that patches our http-parser
>> with the one applied system-wide by fedora[4].
>> 
>> How was the command to build all packages depending even indirectly from
>> another package (http-parser in this case)?  I'll build everything and
>> hope tests will pass.
>> 
>> Thanks, Nicolò
>> 
>
> 'guix refresh -l http-parser' will list all the packages which depend,
> even indirectly, on it. ./pre-inst-env guix build --no-grafts
> $(./pre-inst-env guix refresh -l http-parser | cut -f2 -d':') will build
> them all if you don't feel like copy-pasting the list.
>

Thanks!

From the output of guix refresh, it could not find
guix-minimal@1.0.1-15.0984481 guix-daemon@1.0.1-15.0984481.

This command succeeded:
#+begin_src bash
./pre-inst-env guix build --no-grafts jami@20191101.3.67671e7 ungoogled-chromium-wayland@80.0.3987.162-0.516e2d9 ungoogled-chromium@80.0.3987.162-0.516e2d9 emacs-nodejs-repl@0.2.2 geierlein@0.9.13 node-env-variable@0.0.4 node-mersenne@0.0.4 node-color-name@1.1.3 node-util-deprecate@1.0.2 node-stack-trace@0.0.10-1.4fd379e node-statsd-parser@0.0.4 ruby-autoprefixer-rails@9.4.7 celestia-gtk@1.6.1-815.9dbdf29 celestia@1.6.1-815.9dbdf29 rust-libgit2-sys@0.8.2 rust-libgit2-sys@0.10.0 fritzing@0.9.3b gitg@3.32.1 cuirass@0.0.1-28.b9031db emacs-guix@0.5.2 guix-jupyter@0.1.0 hpcguix-web@0.0.1-4.f39c90b guile2.0-git@0.3.0 julia@1.3.1 kopete@19.08.3 dolphin-plugins@19.08.3 kate@19.08.3 kdevelop@5.4.6 offlate@0.5 gitless@0.8.8 exa@0.9.0 tokei@10.1.1 r-biocworkflowtools@1.12.1 r-activpal@0.1.3 r-chemometricswithr@0.1.13 r-abjutils@0.2.3 r-adapr@2.0.0 stagit@0.7.2
#+end_src

But two packages are failing:
- sssd@1.16.4
- rust-libgit2-sys

What do you suggest?  If those errors are actually related http-parser
patch, we could either fix/disable those tests or use the patched
version in julia only.

Thanks, Nicolò

>
> -- 
> Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-04-06 23:18                                 ` Nicolò Balzarotti
@ 2020-04-07  5:41                                   ` Efraim Flashner
  2020-04-07  6:05                                     ` Efraim Flashner
  2020-04-07 14:35                                   ` bug#38546: " Efraim Flashner
  1 sibling, 1 reply; 54+ messages in thread
From: Efraim Flashner @ 2020-04-07  5:41 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Marius Bakke, 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 2974 bytes --]

On Tue, Apr 07, 2020 at 01:18:08AM +0200, Nicolò Balzarotti wrote:
> Hello again, the build completed right now.
> 
> Efraim Flashner <efraim@flashner.co.il> writes:
> 
> > On Mon, Apr 06, 2020 at 10:18:25AM +0200, Nicolò Balzarotti wrote:
> >> Efraim Flashner <efraim@flashner.co.il> writes:
> >> 
> >> Hi Efraim,
> >> 
> >> no, AFAIK.
> >> 
> >> The http-parser PR[1] received a comment 18 days ago, so maybe things are slowly
> >> moving.
> >> Julia issue[2] basically suggest to workaround the problem, while [3]
> >> seems to have a patch for julia 1.4.0 ready.
> >> 
> >> In the meantime, I'm sending a quick patch that patches our http-parser
> >> with the one applied system-wide by fedora[4].
> >> 
> >> How was the command to build all packages depending even indirectly from
> >> another package (http-parser in this case)?  I'll build everything and
> >> hope tests will pass.
> >> 
> >> Thanks, Nicolò
> >> 
> >
> > 'guix refresh -l http-parser' will list all the packages which depend,
> > even indirectly, on it. ./pre-inst-env guix build --no-grafts
> > $(./pre-inst-env guix refresh -l http-parser | cut -f2 -d':') will build
> > them all if you don't feel like copy-pasting the list.
> >
> 
> Thanks!
> 
> From the output of guix refresh, it could not find
> guix-minimal@1.0.1-15.0984481 guix-daemon@1.0.1-15.0984481.
> 
> This command succeeded:
> #+begin_src bash
> ./pre-inst-env guix build --no-grafts jami@20191101.3.67671e7 ungoogled-chromium-wayland@80.0.3987.162-0.516e2d9 ungoogled-chromium@80.0.3987.162-0.516e2d9 emacs-nodejs-repl@0.2.2 geierlein@0.9.13 node-env-variable@0.0.4 node-mersenne@0.0.4 node-color-name@1.1.3 node-util-deprecate@1.0.2 node-stack-trace@0.0.10-1.4fd379e node-statsd-parser@0.0.4 ruby-autoprefixer-rails@9.4.7 celestia-gtk@1.6.1-815.9dbdf29 celestia@1.6.1-815.9dbdf29 rust-libgit2-sys@0.8.2 rust-libgit2-sys@0.10.0 fritzing@0.9.3b gitg@3.32.1 cuirass@0.0.1-28.b9031db emacs-guix@0.5.2 guix-jupyter@0.1.0 hpcguix-web@0.0.1-4.f39c90b guile2.0-git@0.3.0 julia@1.3.1 kopete@19.08.3 dolphin-plugins@19.08.3 kate@19.08.3 kdevelop@5.4.6 offlate@0.5 gitless@0.8.8 exa@0.9.0 tokei@10.1.1 r-biocworkflowtools@1.12.1 r-activpal@0.1.3 r-chemometricswithr@0.1.13 r-abjutils@0.2.3 r-adapr@2.0.0 stagit@0.7.2
> #+end_src
> 
> But two packages are failing:
> - sssd@1.16.4
> - rust-libgit2-sys
> 
> What do you suggest?  If those errors are actually related http-parser
> patch, we could either fix/disable those tests or use the patched
> version in julia only.
> 
> Thanks, Nicolò
> 

One of the rust-libgit2-sys packages is known to fail and isn't an
issue. For sssd I see that 1.16.5 has been recently released. Hopefully
that can be a drop-in replacement.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* [bug#38546] [PATCH v5] Julia: Update to 1.3.1
  2020-04-07  5:41                                   ` Efraim Flashner
@ 2020-04-07  6:05                                     ` Efraim Flashner
  0 siblings, 0 replies; 54+ messages in thread
From: Efraim Flashner @ 2020-04-07  6:05 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Marius Bakke, 38546, zimoun

[-- Attachment #1: Type: text/plain, Size: 3260 bytes --]

On Tue, Apr 07, 2020 at 08:41:56AM +0300, Efraim Flashner wrote:
> On Tue, Apr 07, 2020 at 01:18:08AM +0200, Nicolò Balzarotti wrote:
> > Hello again, the build completed right now.
> > 
> > Efraim Flashner <efraim@flashner.co.il> writes:
> > 
> > > On Mon, Apr 06, 2020 at 10:18:25AM +0200, Nicolò Balzarotti wrote:
> > >> Efraim Flashner <efraim@flashner.co.il> writes:
> > >> 
> > >> Hi Efraim,
> > >> 
> > >> no, AFAIK.
> > >> 
> > >> The http-parser PR[1] received a comment 18 days ago, so maybe things are slowly
> > >> moving.
> > >> Julia issue[2] basically suggest to workaround the problem, while [3]
> > >> seems to have a patch for julia 1.4.0 ready.
> > >> 
> > >> In the meantime, I'm sending a quick patch that patches our http-parser
> > >> with the one applied system-wide by fedora[4].
> > >> 
> > >> How was the command to build all packages depending even indirectly from
> > >> another package (http-parser in this case)?  I'll build everything and
> > >> hope tests will pass.
> > >> 
> > >> Thanks, Nicolò
> > >> 
> > >
> > > 'guix refresh -l http-parser' will list all the packages which depend,
> > > even indirectly, on it. ./pre-inst-env guix build --no-grafts
> > > $(./pre-inst-env guix refresh -l http-parser | cut -f2 -d':') will build
> > > them all if you don't feel like copy-pasting the list.
> > >
> > 
> > Thanks!
> > 
> > From the output of guix refresh, it could not find
> > guix-minimal@1.0.1-15.0984481 guix-daemon@1.0.1-15.0984481.
> > 
> > This command succeeded:
> > #+begin_src bash
> > ./pre-inst-env guix build --no-grafts jami@20191101.3.67671e7 ungoogled-chromium-wayland@80.0.3987.162-0.516e2d9 ungoogled-chromium@80.0.3987.162-0.516e2d9 emacs-nodejs-repl@0.2.2 geierlein@0.9.13 node-env-variable@0.0.4 node-mersenne@0.0.4 node-color-name@1.1.3 node-util-deprecate@1.0.2 node-stack-trace@0.0.10-1.4fd379e node-statsd-parser@0.0.4 ruby-autoprefixer-rails@9.4.7 celestia-gtk@1.6.1-815.9dbdf29 celestia@1.6.1-815.9dbdf29 rust-libgit2-sys@0.8.2 rust-libgit2-sys@0.10.0 fritzing@0.9.3b gitg@3.32.1 cuirass@0.0.1-28.b9031db emacs-guix@0.5.2 guix-jupyter@0.1.0 hpcguix-web@0.0.1-4.f39c90b guile2.0-git@0.3.0 julia@1.3.1 kopete@19.08.3 dolphin-plugins@19.08.3 kate@19.08.3 kdevelop@5.4.6 offlate@0.5 gitless@0.8.8 exa@0.9.0 tokei@10.1.1 r-biocworkflowtools@1.12.1 r-activpal@0.1.3 r-chemometricswithr@0.1.13 r-abjutils@0.2.3 r-adapr@2.0.0 stagit@0.7.2
> > #+end_src
> > 
> > But two packages are failing:
> > - sssd@1.16.4
> > - rust-libgit2-sys
> > 
> > What do you suggest?  If those errors are actually related http-parser
> > patch, we could either fix/disable those tests or use the patched
> > version in julia only.
> > 
> > Thanks, Nicolò
> > 
> 
> One of the rust-libgit2-sys packages is known to fail and isn't an
> issue. For sssd I see that 1.16.5 has been recently released. Hopefully
> that can be a drop-in replacement.
> 

I built sssd@1.16.5 with the http-parser patch and it passed all of its
tests so that looks good.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

* bug#38546: [PATCH v5] Julia: Update to 1.3.1
  2020-04-06 23:18                                 ` Nicolò Balzarotti
  2020-04-07  5:41                                   ` Efraim Flashner
@ 2020-04-07 14:35                                   ` Efraim Flashner
  1 sibling, 0 replies; 54+ messages in thread
From: Efraim Flashner @ 2020-04-07 14:35 UTC (permalink / raw)
  To: Nicolò Balzarotti; +Cc: Marius Bakke, 38546-done, zimoun

[-- Attachment #1: Type: text/plain, Size: 657 bytes --]

I pushed the patches. I also bumped libgit2 to 1.0.0 which was released
6 days ago. There were a couple of minor things with the patches:

dsfmt: I also installed the license file
libgit2: Reworded the commit message
julia: I pushed a patch first to redo the indentation so that your patch
would stand out and not get lost on the indentation changes.
I filled out the commit message for julia-1.3.1 which I think was the
main thing.


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 54+ messages in thread

end of thread, other threads:[~2020-04-07 14:37 UTC | newest]

Thread overview: 54+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <87pnfgvqgt.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me>
2019-12-09 13:36 ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz nixo
2019-10-10 15:49   ` [bug#38546] [PATCH 3/3] gnu: julia-xyz: Add julia-compat Nicolò Balzarotti
2019-12-15 21:46     ` Ludovic Courtès
2019-10-10 15:49   ` [bug#38546] [PATCH 1/3] gnu: julia: Set to JULIA_LOAD_PATH and JULIA_DEPOT_PATH variables Nicolò Balzarotti
2019-12-15 21:43     ` Ludovic Courtès
2019-10-10 15:49   ` [bug#38546] [PATCH 2/3] gnu: julia-build-system: Enable tests Nicolò Balzarotti
2019-12-15 21:45     ` Ludovic Courtès
2019-12-12  8:43   ` [bug#38546] [PATCH 01/11] gnu: julia: Update to 1.3.1 nixo
2019-12-15 21:40   ` [bug#38546] [PATCH 0/3] Julia: fix package build and add julia-xyz Ludovic Courtès
2020-01-10  9:25   ` [bug#38546] [PATCH 03/11] gnu: julia: Adjust indentation nixo
2020-01-17 18:40   ` [bug#38546] [PATCH 05/11] gnu: build: julia-build-system: fix package nixo
2020-01-18 12:58   ` [bug#38546] [PATCH 02/11] gnu: julia: use SOURCE_DATE_EPOCH for precompilation timestamp nixo
2020-01-18 13:05   ` [bug#38546] [PATCH 06/11] gnu: Add julia-compat nixo
2020-01-18 13:06   ` [bug#38546] [PATCH 07/11] gnu: Add julia-inifile nixo
2020-01-18 13:07   ` [bug#38546] [PATCH 08/11] gnu: Add julia-sha nixo
2020-01-18 13:07   ` [bug#38546] [PATCH 09/11] gnu: Add julia-binaryprovider nixo
2020-01-18 13:11   ` [bug#38546] [PATCH 10/11] gnu: Add julia-mbedtls nixo
2020-01-18 13:11   ` [bug#38546] [PATCH 11/11] gnu: Add julia-http nixo
2020-01-18 13:23   ` [bug#38546] [PATCH 04/11] use wrapper to set JULIA_LOAD_PATH and JULIA_DEPOT_PATH nixo
2020-01-18 13:32   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/11] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
2020-01-18 13:36   ` [bug#38546] [nixo] [PATCH 01/11] gnu: julia: Update to 1.3.1 Nicolò Balzarotti
2020-01-18 13:42   ` [bug#38546] [Nicolò Balzarotti] [PATCH 00/10] Update julia to 1.3.1, fix precompilation, add HTTP.jl Nicolò Balzarotti
2020-01-18 13:59   ` [bug#38546] [00/11] Update Julia, Fix " Nicolò Balzarotti
2020-01-20 18:49     ` zimoun
2020-01-21 13:45       ` Nicolò Balzarotti
2020-01-22  9:22         ` zimoun
2020-01-22  9:59           ` Nicolò Balzarotti
2020-01-24 17:26             ` zimoun
2020-02-04 18:03               ` zimoun
2020-02-07 12:06                 ` zimoun
2020-02-11 14:51                 ` zimoun
2020-02-11 15:10                   ` Nicolò Balzarotti
2020-02-11 15:19                     ` zimoun
2020-02-11 15:24                       ` Nicolò Balzarotti
2020-01-18 14:35   ` [bug#38546] Julia patches v3 Nicolò Balzarotti
2020-02-11 17:58   ` [bug#38546] [PATCH v4] Update Julia 1.3.1: almost done zimoun
2020-02-24 12:50     ` zimoun
2020-02-24 20:59       ` Nicolò Balzarotti
2020-02-25 16:12         ` zimoun
2020-02-25 18:08           ` Nicolò Balzarotti
2020-02-26 12:32             ` [bug#38546] [PATCH v5] Julia: Update to 1.3.1 Nicolò Balzarotti
2020-03-16 10:06               ` Efraim Flashner
2020-03-17  7:51                 ` Nicolò Balzarotti
2020-03-17  8:12                   ` Efraim Flashner
2020-03-17 12:21                     ` Marius Bakke
2020-03-17 13:37                       ` Nicolò Balzarotti
2020-03-19 12:28                         ` Marius Bakke
2020-04-06  6:09                           ` Efraim Flashner
2020-04-06  8:18                             ` Nicolò Balzarotti
2020-04-06  8:37                               ` Efraim Flashner
2020-04-06 23:18                                 ` Nicolò Balzarotti
2020-04-07  5:41                                   ` Efraim Flashner
2020-04-07  6:05                                     ` Efraim Flashner
2020-04-07 14:35                                   ` bug#38546: " Efraim Flashner

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.