[PATCH] Add julia-json with dependencies

  • Done
  • quality assurance status badge
Details
3 participants
  • Nicolò Balzarotti
  • Ludovic Courtès
  • zimoun
Owner
unassigned
Submitted by
Nicolò Balzarotti
Severity
normal
N
N
Nicolò Balzarotti wrote on 19 Jan 2021 00:47
(address . guix-patches@gnu.org)
87ft2xzu1g.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
Hi guix!

This patch series adds julia-json together with its dependencies.

It also enable tests for julia packages.

Thanks, Nicolò
From a374ec23346cca7ff6f28c8141102f8838db649a Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:56:54 +0100
Subject: [PATCH 1/9] guix: build-system (julia): Enable tests.

* guix/build-system/julia.scm (julia-build): Set tests? default to #t.
* guix/build/julia-build-system.scm (check): Respect tests? and fix julia
invocation.
(%standard-phases): Add check phase after install.
---
guix/build-system/julia.scm | 2 +-
guix/build/julia-build-system.scm | 27 +++++++++++++++++----------
2 files changed, 18 insertions(+), 11 deletions(-)

Toggle diff (60 lines)
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 e8ebcf8ba0..61817e0b47 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -69,15 +69,22 @@
(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" (string-append builddir "packages/"))
- (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/")))
+ ;; With a patch, SOURCE_DATE_EPOCH is honored
+ (setenv "SOURCE_DATE_EPOCH" "1")
+ (setenv "JULIA_DEPOT_PATH" builddir)
+ (setenv "JULIA_LOAD_PATH"
+ (string-append builddir "packages/" ":"
+ (or (getenv "JULIA_LOAD_PATH")
+ "")))
+ (setenv "HOME" "/tmp")
+ (invoke "julia"
+ (string-append builddir "packages/"
+ package "/test/runtests.jl"))))
#t)
(define (julia-create-package-toml outputs source
@@ -112,7 +119,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.29.2
From 46cc28fe6d532c64006b6fea88604b198acec278 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 17:42:50 +0100
Subject: [PATCH 2/9] gnu: julia-compat: Update to 3.25.0.

* gnu/packages/julia-xyz.scm (julia-compat): Update to 3.25.0.
---
gnu/packages/julia-xyz.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f1da66a4be..9a4bf7c678 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,7 +25,7 @@
(define-public julia-compat
(package
(name "julia-compat")
- (version "3.9.1")
+ (version "3.25.0")
(source
(origin
(method git-fetch)
@@ -34,7 +34,7 @@
(commit (string-append "v" version))))
(file-name "Compat")
(sha256
- (base32 "01vwjr2134bzgnaxwd67knbibbhnfgnqjw7gxrp29s6y2a6j3882"))))
+ (base32 "1m4r5i8mq29xjp3mllh6047n5a78sdyld57m15anrnsjgaapcgby"))))
(build-system julia-build-system)
(home-page "https://github.com/JuliaLang/Compat.jl")
(synopsis "Compatibility across Julia versions")
--
2.29.2
From ac384ede7faccc6ce9ac6c97522c7dbd18200b4a Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:11:42 +0100
Subject: [PATCH 3/9] gnu: Add julia-orderedcollections.

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

Toggle diff (33 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 9a4bf7c678..d3c1f35996 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -43,3 +43,26 @@ 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-orderedcollections
+ (package
+ (name "julia-orderedcollections")
+ (version "1.3.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaCollections/OrderedCollections.jl")
+ (commit (string-append "v" version))))
+ (file-name "OrderedCollections")
+ (sha256
+ (base32 "0sfip1ixghsz91q2s7d62rgzw3gppg42fg6bccxlplqa3hfmbycf"))))
+ (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)))
--
2.29.2
From 9736ab882b3348619cf3e74f4282404627dd2b64 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:17:50 +0100
Subject: [PATCH 4/9] gnu: Add julia-datastructures.

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

Toggle diff (37 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index d3c1f35996..fee694b1fd 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -44,6 +44,30 @@ 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.18.8")
+ (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 "1r4xswdvnnlbp5rfa7i7k6kzgkwizvqwyz7jscvyqjylcs6wdsnc"))))
+ (propagated-inputs
+ `(("julia-compat" ,julia-compat)
+ ("julia-orderedcollections" ,julia-orderedcollections)))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaCollections/DataStructures.jl")
+ (synopsis "Julia implementation of Data structures")
+ (description "This package implements a variety of data structures,
+including, CircularBuffer, Queue, Stack, Accumulators, Linked Lists, Sorted
+Dicts and many others.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.29.2
From 79fa1af823688da6796a12d664352a4f0512d702 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:25:02 +0100
Subject: [PATCH 5/9] gnu: Add julia-fixedpointnumbers.

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

Toggle diff (48 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index fee694b1fd..f5c9e000db 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,6 +68,41 @@ including, CircularBuffer, Queue, Stack, Accumulators, Linked Lists, Sorted
Dicts and many others.")
(license license:expat)))
+(define-public julia-fixedpointnumbers
+ (package
+ (name "julia-fixedpointnumbers")
+ (version "0.8.4")
+ (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 "0j0n40n04q9sk68wh9jq90m6c67k4ws02k41djjzkrqmpzv4rcdi"))))
+ (build-system julia-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'disable-failing-test
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "test/fixed.jl"
+ ;; A deprecation warning is not thrown
+ (("@test_logs.*:warn" all) (string-append "# " all)))
+ #t)))))
+ (propagated-inputs `(("julia-compat" ,julia-compat)))
+ (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
+ (synopsis "Fixed point types for julia")
+ (description "@code{FixedPointNumbers.jl} implements fixed-point number
+types for Julia. 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-orderedcollections
(package
(name "julia-orderedcollections")
--
2.29.2
From f4ddd59a14cb0fcc259efbf509c2a8073adf62fc Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:27:32 +0100
Subject: [PATCH 6/9] gnu: Add julia-parsers.

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

Toggle diff (30 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f5c9e000db..b887832df3 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -125,3 +125,23 @@ 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")
+ (version "1.0.15")
+ (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 "16iffl6l28kspgqch48mhi1s8qhspr3cpqcwsph3rqi72lbfqygx"))))
+ (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.jl} is a collection of type parsers and
+utilities for Julia.")
+ (license license:expat)))
--
2.29.2
From 358d115e218fc433b15474500a221861c9c82abb Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:46:51 +0100
Subject: [PATCH 7/9] gnu: Add julia-adapt.

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

Toggle diff (35 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index b887832df3..3601006976 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -22,6 +22,28 @@
#:use-module (guix git-download)
#:use-module (guix build-system julia))
+(define-public julia-adapt
+ (package
+ (name "julia-adapt")
+ (version "3.1.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaGPU/Adapt.jl")
+ (commit (string-append "v" version))))
+ (file-name "Adapt")
+ (sha256
+ (base32 "1qcj7i75m0wwk0xcdgf89bjymnz2dipv2iwxys8wzpvrashi6wsp"))))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaGPU/Adapt.jl")
+ (synopsis "Package providing the @code{adapt} function, similar to @code{convert}")
+ (description "This julia package provides the @code{adapt(T, x)} function
+acts like @code{convert(T, x)}, but without the restriction of returning a
+T. This allows you to \"convert\" wrapper types like Adjoint to be GPU
+compatible without throwing away the wrapper.")
+ (license license:expat)))
+
(define-public julia-compat
(package
(name "julia-compat")
--
2.29.2
From 06f2e7bbbff5b73493c9a0640ec4c9c6c20280c9 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:01:28 +0100
Subject: [PATCH 8/9] gnu: Add julia-offsetarrays.

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

Toggle diff (38 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 3601006976..429ab0afad 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -148,6 +148,31 @@ Ordered* containers return items in the order in which they were added to the
collection.")
(license license:expat)))
+(define-public julia-offsetarrays
+ (package
+ (name "julia-offsetarrays")
+ (version "1.5.1")
+ (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 "0pd42an8kj2mgw3sv00ijfrsvmfjfgf12lfmpan6zkdckqa73jqz"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-adapt" ,julia-adapt)))
+ ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
+ (arguments '(#:tests? #f))
+ (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
+ (synopsis "Fortran-like arrays with arbitrary, zero or negative indices")
+ (description "@code{OffsetArrays.jl} 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.29.2
From 3ebd72ef6a55ad46522fe2534b775e9b6d20130f Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:06:34 +0100
Subject: [PATCH 9/9] gnu: Add julia-json.

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

Toggle diff (37 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 429ab0afad..7aba08cdb1 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -125,6 +125,30 @@ 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-json
+ (package
+ (name "julia-json")
+ (version "0.21.1")
+ (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 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-datastructures" ,julia-datastructures)
+ ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
+ ("julia-parsers" ,julia-parsers)
+ ("julia-offsetarrays" ,julia-offsetarrays)))
+ (home-page "https://github.com/JuliaIO/JSON.jl")
+ (synopsis "JSON parsing and printing")
+ (description "Parsing and printing JSON in pure Julia.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.29.2
L
L
Ludovic Courtès wrote on 26 Jan 2021 22:33
(name . Nicolò Balzarotti)(address . anothersms@gmail.com)(address . 45972@debbugs.gnu.org)
87wnvzwfgu.fsf@gnu.org
Hi Nicolò,

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

Toggle quote (2 lines)
> This patch series adds julia-json together with its dependencies.

Neat. I looked at it quickly and it LGTM. Nitpicks:

Toggle quote (3 lines)
> + (synopsis "Julia implementation of associative containers that preserve
> +insertion order")

Maybe remove “Julia implementation of”.

Toggle quote (2 lines)
> + (description "This package implements OrderedDicts and OrderedSets, which

Ideally use @code for identifiers.

Toggle quote (2 lines)
> + (synopsis "Fixed point types for julia")

s/julia/Julia/

Toggle quote (3 lines)
> + (synopsis "JSON parsing and printing")
> + (description "Parsing and printing JSON in pure Julia.")

Please make that a full sentence.

If you’re confident with the licenses and ‘guix lint’ is happy,
please push! Nice to see more Julia packages.

Ludo’.
N
N
Nicolò Balzarotti wrote on 27 Jan 2021 00:23
Re: [bug#45972] [PATCH] Add julia-json with dependencies
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 45972@debbugs.gnu.org)
87lfcfcmf3.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
I applied all your suggestions :)

Toggle quote (3 lines)
> If you’re confident with the licenses and ‘guix lint’ is happy,
> please push!

Almost all of Julia packages are under MIT (expat), I double checked and
they are fine. Also, 3 packages (out of 8) have been updated since my
submission, so I updated them now and guix lint does not complain anymore.

Toggle quote (2 lines)
> Nice to see more Julia packages.

This is the first batch, I finally decided to submit in small batches
the 100+ packages I have; you have been warned :D

Here's the updated patchset (if somebody can push).

Thanks Ludo for the review
From a374ec23346cca7ff6f28c8141102f8838db649a Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:56:54 +0100
Subject: [PATCH v2 1/9] guix: build-system (julia): Enable tests.

* guix/build-system/julia.scm (julia-build): Set tests? default to #t.
* guix/build/julia-build-system.scm (check): Respect tests? and fix julia
invocation.
(%standard-phases): Add check phase after install.
---
guix/build-system/julia.scm | 2 +-
guix/build/julia-build-system.scm | 27 +++++++++++++++++----------
2 files changed, 18 insertions(+), 11 deletions(-)

Toggle diff (60 lines)
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 e8ebcf8ba0..61817e0b47 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -69,15 +69,22 @@
(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" (string-append builddir "packages/"))
- (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/")))
+ ;; With a patch, SOURCE_DATE_EPOCH is honored
+ (setenv "SOURCE_DATE_EPOCH" "1")
+ (setenv "JULIA_DEPOT_PATH" builddir)
+ (setenv "JULIA_LOAD_PATH"
+ (string-append builddir "packages/" ":"
+ (or (getenv "JULIA_LOAD_PATH")
+ "")))
+ (setenv "HOME" "/tmp")
+ (invoke "julia"
+ (string-append builddir "packages/"
+ package "/test/runtests.jl"))))
#t)
(define (julia-create-package-toml outputs source
@@ -112,7 +119,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.30.0
From 46cc28fe6d532c64006b6fea88604b198acec278 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 17:42:50 +0100
Subject: [PATCH v2 2/9] gnu: julia-compat: Update to 3.25.0.

* gnu/packages/julia-xyz.scm (julia-compat): Update to 3.25.0.
---
gnu/packages/julia-xyz.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f1da66a4be..9a4bf7c678 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,7 +25,7 @@
(define-public julia-compat
(package
(name "julia-compat")
- (version "3.9.1")
+ (version "3.25.0")
(source
(origin
(method git-fetch)
@@ -34,7 +34,7 @@
(commit (string-append "v" version))))
(file-name "Compat")
(sha256
- (base32 "01vwjr2134bzgnaxwd67knbibbhnfgnqjw7gxrp29s6y2a6j3882"))))
+ (base32 "1m4r5i8mq29xjp3mllh6047n5a78sdyld57m15anrnsjgaapcgby"))))
(build-system julia-build-system)
(home-page "https://github.com/JuliaLang/Compat.jl")
(synopsis "Compatibility across Julia versions")
--
2.30.0
From cecf5b2739226f06bfe9ff8df55207306e1db2b8 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:11:42 +0100
Subject: [PATCH v2 3/9] gnu: Add julia-orderedcollections.

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

Toggle diff (32 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 9a4bf7c678..58b8795eab 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -43,3 +43,25 @@ 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-orderedcollections
+ (package
+ (name "julia-orderedcollections")
+ (version "1.3.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaCollections/OrderedCollections.jl")
+ (commit (string-append "v" version))))
+ (file-name "OrderedCollections")
+ (sha256
+ (base32 "0sfip1ixghsz91q2s7d62rgzw3gppg42fg6bccxlplqa3hfmbycf"))))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaCollections/OrderedCollections.jl")
+ (synopsis "Associative containers that preserve insertion order")
+ (description "This package implements @code{OrderedDicts} and
+@code{OrderedSets}, which are similar to containers in base Julia. However,
+during iteration the @code{Ordered*} containers return items in the order in
+which they were added to the collection.")
+ (license license:expat)))
--
2.30.0
From ea24edc3e10695100a3c486736a2e4647316edf0 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:17:50 +0100
Subject: [PATCH v2 4/9] gnu: Add julia-datastructures.

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

Toggle diff (37 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 58b8795eab..aacc7ee96d 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -44,6 +44,30 @@ 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.18.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 "0hdqp8ipsqdw5bqqkdvz4j6n67x80sj5azr9vzyxwjfsgkfbnk2l"))))
+ (propagated-inputs
+ `(("julia-compat" ,julia-compat)
+ ("julia-orderedcollections" ,julia-orderedcollections)))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaCollections/DataStructures.jl")
+ (synopsis "Julia module providing different data structures")
+ (description "This package implements a variety of data structures,
+including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
+@code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
From 431b0bb4d5b15c6b7121dcad56a81bef0f3c9aec Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:25:02 +0100
Subject: [PATCH v2 5/9] gnu: Add julia-fixedpointnumbers.

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

Toggle diff (48 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index aacc7ee96d..6b9ff1bc8d 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,6 +68,41 @@ including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
@code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
(license license:expat)))
+(define-public julia-fixedpointnumbers
+ (package
+ (name "julia-fixedpointnumbers")
+ (version "0.8.4")
+ (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 "0j0n40n04q9sk68wh9jq90m6c67k4ws02k41djjzkrqmpzv4rcdi"))))
+ (build-system julia-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'disable-failing-test
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "test/fixed.jl"
+ ;; A deprecation warning is not thrown
+ (("@test_logs.*:warn" all) (string-append "# " all)))
+ #t)))))
+ (propagated-inputs `(("julia-compat" ,julia-compat)))
+ (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
+ (synopsis "Fixed point types for Julia")
+ (description "@code{FixedPointNumbers.jl} implements fixed-point number
+types for Julia. 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-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
From 1814f61130c39eba91507fe5bde654e99d9c7421 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:27:32 +0100
Subject: [PATCH v2 6/9] gnu: Add julia-parsers.

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

Toggle diff (30 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 6b9ff1bc8d..a35755d5da 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -124,3 +124,23 @@ digits (bits) after the decimal (radix) point.")
during iteration the @code{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")
+ (version "1.0.15")
+ (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 "16iffl6l28kspgqch48mhi1s8qhspr3cpqcwsph3rqi72lbfqygx"))))
+ (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.jl} is a collection of type parsers and
+utilities for Julia.")
+ (license license:expat)))
--
2.30.0
From 985de9540ffc4ed5351f9b884e95fea920d9e325 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:46:51 +0100
Subject: [PATCH v2 7/9] gnu: Add julia-adapt.

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

Toggle diff (35 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index a35755d5da..58b45d3f15 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -22,6 +22,28 @@
#:use-module (guix git-download)
#:use-module (guix build-system julia))
+(define-public julia-adapt
+ (package
+ (name "julia-adapt")
+ (version "3.1.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaGPU/Adapt.jl")
+ (commit (string-append "v" version))))
+ (file-name "Adapt")
+ (sha256
+ (base32 "1lks6k3a1gvwlplld47nh6xfy3nnlpc0vhkzg6zg0qn33qdmavrg"))))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaGPU/Adapt.jl")
+ (synopsis "Package providing the @code{adapt} function, similar to @code{convert}")
+ (description "This Julia package provides the @code{adapt(T, x)} function
+acts like @code{convert(T, x)}, but without the restriction of returning a
+@code{T}. This allows you to \"convert\" wrapper types like @code{Adjoint} to
+be GPU compatible without throwing away the wrapper.")
+ (license license:expat)))
+
(define-public julia-compat
(package
(name "julia-compat")
--
2.30.0
From fed9e5fe47495120b49c35535bc9d26fdd065760 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:01:28 +0100
Subject: [PATCH v2 8/9] gnu: Add julia-offsetarrays.

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

Toggle diff (38 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 58b45d3f15..70d7f1d718 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -147,6 +147,31 @@ during iteration the @code{Ordered*} containers return items in the order in
which they were added to the collection.")
(license license:expat)))
+(define-public julia-offsetarrays
+ (package
+ (name "julia-offsetarrays")
+ (version "1.5.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 "1y3fnssw2hzyghrk6jfcxslab0f8sjkjszh482snfq4k6mkrhy77"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-adapt" ,julia-adapt)))
+ ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
+ (arguments '(#:tests? #f))
+ (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
+ (synopsis "Fortran-like arrays with arbitrary, zero or negative indices")
+ (description "@code{OffsetArrays.jl} 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.30.0
From aa1231bb89d1a7271181d437ebe36952ec8ccfc4 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:06:34 +0100
Subject: [PATCH v2 9/9] gnu: Add julia-json.

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

Toggle diff (38 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 70d7f1d718..a79b8d07b6 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -125,6 +125,31 @@ 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-json
+ (package
+ (name "julia-json")
+ (version "0.21.1")
+ (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 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-datastructures" ,julia-datastructures)
+ ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
+ ("julia-parsers" ,julia-parsers)
+ ("julia-offsetarrays" ,julia-offsetarrays)))
+ (home-page "https://github.com/JuliaIO/JSON.jl")
+ (synopsis "JSON parsing and printing library for Julia")
+ (description "@code{JSON.jl} is a pure Julia module which supports parsing
+and printing JSON documents.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
L
L
Ludovic Courtès wrote on 27 Jan 2021 23:40
(name . Nicolò Balzarotti)(address . anothersms@gmail.com)(address . 45972@debbugs.gnu.org)
87mtwut34z.fsf@gnu.org
Hi,

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

Toggle quote (4 lines)
> Almost all of Julia packages are under MIT (expat), I double checked and
> they are fine. Also, 3 packages (out of 8) have been updated since my
> submission, so I updated them now and guix lint does not complain anymore.

Great.

Toggle quote (3 lines)
> This is the first batch, I finally decided to submit in small batches
> the 100+ packages I have; you have been warned :D

Oh, fun! :-)

So, actually, we have a problem:

Toggle quote (12 lines)
> +(define-public julia-orderedcollections
> + (package
> + (name "julia-orderedcollections")
> + (version "1.3.2")
> + (source
> + (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url "https://github.com/JuliaCollections/OrderedCollections.jl")
> + (commit (string-append "v" version))))
> + (file-name "OrderedCollections")

I was surprised that ‘guix lint’ doesn’t complain about this file name,
I thought it required the file name to match the package name and at
least that’s the spirit (I’ll take a look).

Anyway, I went ahead and replaced all these by (git-file-name name
version) as is done elsewhere. But now the tests would fail like so:

Toggle snippet (5 lines)
starting phase `check'
ERROR: LoadError: ArgumentError: Package Adapt not found in current path:
- Run `import Pkg; Pkg.add("Adapt")` to install the Adapt package.

My understanding is that the first patch expects the source file name to
match the Julia package name. IMO, that shouldn’t be the case. Can we
either extract the Julia package name from metadata that’s in the
package itself (?), or otherwise pass it to all the phases via
‘julia-build-system’?

Sorry for not noticing earlier!

Thanks,
Ludo’.
N
N
Nicolò Balzarotti wrote on 28 Jan 2021 01:30
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 45972@debbugs.gnu.org)
87czxpdhsv.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
Toggle quote (3 lines)
> My understanding is that the first patch expects the source file name to
> match the Julia package name.

That's correct, we use it in the build system.

Toggle quote (2 lines)
> IMO, that shouldn’t be the case.

At first I wasn't sure it was ok, but it went on through the revision
process when I submitted the first package (Compat) so I tought it was fine.

Toggle quote (4 lines)
> Can we either extract the Julia package name from metadata that’s in
> the package itself (?), or otherwise pass it to all the phases via
> ‘julia-build-system’?

Sure, I'd just read it from Package.toml (nowadays almost all the
packages have this file, and for when it's missing we also have the
julia-create-package-toml procedure that creates it).

The file is toml, but I don't see a toml parser in guix. So, I'd use a
function like the following:

#+begin_src scheme
(define (package.toml->name file)
(call-with-input-file file
(lambda (in)
(let loop ((line (read-line in 'concat)))
(if (eof-object? line)
#f ;What to do?
(let ((m (string-match "name\\s*=\\s*\"(.*)\"" line)))
(if m (match:substring m 1)
(loop (read-line in 'concat)))))))))
#+end_src

As you can see this is very minimal/naive (takes the first name = ""
occurrence, does not even consider comments, for which I'd add a
negative lookahead "^(?!#)" which I can't get to work with ice-9 regex),
but tested on a few packages it working. I don't know what to do when
the match is not found (since it's something that might happen only
during development, the #f fallback should not be too bad, btw, as the
build will fail).

The other way I think this is easily solvable is by asking julia
directly, by reading the output of:

(invoke-julia "using Pkg; Pkg.TOML.parsefile("Project.toml")["name"] |> println")

doing something like cargo's manifest-target procedure does. But it'd
go the other way if it's ok.

Let me know! Once decided, I'll submit the updated patches

Toggle quote (3 lines)
>
> Sorry for not noticing earlier!
>
np and thanks again!
L
L
Ludovic Courtès wrote on 28 Jan 2021 14:10
(name . Nicolò Balzarotti)(address . anothersms@gmail.com)(address . 45972@debbugs.gnu.org)
87h7n1qkaw.fsf@gnu.org
Buon giorno!

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

Toggle quote (10 lines)
>> My understanding is that the first patch expects the source file name to
>> match the Julia package name.
>
> That's correct, we use it in the build system.
>
>> IMO, that shouldn’t be the case.
>
> At first I wasn't sure it was ok, but it went on through the revision
> process when I submitted the first package (Compat) so I tought it was fine.

If it was me it was probably an oversight, I’m sorry about that.

Toggle quote (23 lines)
>> Can we either extract the Julia package name from metadata that’s in
>> the package itself (?), or otherwise pass it to all the phases via
>> ‘julia-build-system’?
>
> Sure, I'd just read it from Package.toml (nowadays almost all the
> packages have this file, and for when it's missing we also have the
> julia-create-package-toml procedure that creates it).
>
> The file is toml, but I don't see a toml parser in guix. So, I'd use a
> function like the following:
>
> #+begin_src scheme
> (define (package.toml->name file)
> (call-with-input-file file
> (lambda (in)
> (let loop ((line (read-line in 'concat)))
> (if (eof-object? line)
> #f ;What to do?
> (let ((m (string-match "name\\s*=\\s*\"(.*)\"" line)))
> (if m (match:substring m 1)
> (loop (read-line in 'concat)))))))))
> #+end_src

Sounds reasonable to me. If I understand the toml format correctly,
“name=.*” is guaranteed to be on a line on its own, so that looks safe.

Toggle quote (8 lines)
> As you can see this is very minimal/naive (takes the first name = ""
> occurrence, does not even consider comments, for which I'd add a
> negative lookahead "^(?!#)" which I can't get to work with ice-9 regex),
> but tested on a few packages it working. I don't know what to do when
> the match is not found (since it's something that might happen only
> during development, the #f fallback should not be too bad, btw, as the
> build will fail).

Yes, sounds good.

To be on the safe side, we can add a #:julia-package-name parameter to
the build system; it would default to #f, in which case the name is
extracted from the toml file.

Toggle quote (8 lines)
> The other way I think this is easily solvable is by asking julia
> directly, by reading the output of:
>
> (invoke-julia "using Pkg; Pkg.TOML.parsefile("Project.toml")["name"] |> println")
>
> doing something like cargo's manifest-target procedure does. But it'd
> go the other way if it's ok.

Yeah, the basic “parser” seems to be good enough.

Thanks!

Ludo’.
N
N
Nicolò Balzarotti wrote on 28 Jan 2021 16:37
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 45972@debbugs.gnu.org)
87y2gdax8j.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (5 lines)
> Buon giorno!
>
>>> IMO, that shouldn’t be the case.
> If it was me it was probably an oversight, I’m sorry about that.

No problem! It appeared also in the manual so I fixed it

Toggle quote (9 lines)
>
>>> Can we either extract the Julia package name from metadata that’s in
>>> the package itself (?), or otherwise pass it to all the phases via
>>> ‘julia-build-system’?
>
> Sounds reasonable to me. If I understand the toml format correctly,
> “name=.*” is guaranteed to be on a line on its own, so that looks
> safe.

exactly

Toggle quote (5 lines)
>
> To be on the safe side, we can add a #:julia-package-name parameter to
> the build system; it would default to #f, in which case the name is
> extracted from the toml file.
>
Done, I attached the updated patch set!
From ea999a33f5b70bb98c890bdc92f6755ad56694a1 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:56:54 +0100
Subject: [PATCH v4 01/11] guix: build-system (julia): Enable tests.

* guix/build-system/julia.scm (julia-build): Set tests? default to #t.
* guix/build/julia-build-system.scm (check): Respect tests? and fix julia
invocation.
(%standard-phases): Add check phase after install.
* doc/guix.texi (julia-build-system): Update accordingly.
---
doc/guix.texi | 2 +-
guix/build-system/julia.scm | 2 +-
guix/build/julia-build-system.scm | 27 +++++++++++++++++----------
3 files changed, 19 insertions(+), 12 deletions(-)

Toggle diff (73 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index dc41fe9aea..a7ae9b60a7 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7619,7 +7619,7 @@ implements the build procedure used by @uref{https://julialang.org/,
julia} packages, which essentially is similar to running @samp{julia -e
'using Pkg; Pkg.add(package)'} in an environment where
@env{JULIA_LOAD_PATH} contains the paths to all Julia package inputs.
-Tests are run with @code{Pkg.test}.
+Tests are run by calling @code{/test/runtests.jl}.
Julia packages require the source @code{file-name} to be the real name of the
package, correctly capitalized.
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 e8ebcf8ba0..61817e0b47 100644
--- a/guix/build/julia-build-system.scm
+++ b/guix/build/julia-build-system.scm
@@ -69,15 +69,22 @@
(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" (string-append builddir "packages/"))
- (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/")))
+ ;; With a patch, SOURCE_DATE_EPOCH is honored
+ (setenv "SOURCE_DATE_EPOCH" "1")
+ (setenv "JULIA_DEPOT_PATH" builddir)
+ (setenv "JULIA_LOAD_PATH"
+ (string-append builddir "packages/" ":"
+ (or (getenv "JULIA_LOAD_PATH")
+ "")))
+ (setenv "HOME" "/tmp")
+ (invoke "julia"
+ (string-append builddir "packages/"
+ package "/test/runtests.jl"))))
#t)
(define (julia-create-package-toml outputs source
@@ -112,7 +119,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.30.0
From 8512ee370db8d8aaf7457a28db3d57778210c484 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Thu, 28 Jan 2021 16:23:29 +0100
Subject: [PATCH v4 03/11] gnu: julia-xyz (julia-compat): Set file-name
according to standards.

* gnu/packages/julia-xyz.scm (): New variable.
---
gnu/packages/julia-xyz.scm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

Toggle diff (15 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f1da66a4be..f00faf6223 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -32,7 +32,7 @@
(uri (git-reference
(url "https://github.com/JuliaLang/Compat.jl")
(commit (string-append "v" version))))
- (file-name "Compat")
+ (file-name (git-file-name name version))
(sha256
(base32 "01vwjr2134bzgnaxwd67knbibbhnfgnqjw7gxrp29s6y2a6j3882"))))
(build-system julia-build-system)
--
2.30.0
From 0c02cfcca23a9e7a96edbbfcc78ed4637a6d0ec5 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 17:42:50 +0100
Subject: [PATCH v4 04/11] gnu: julia-compat: Update to 3.25.0.

* gnu/packages/julia-xyz.scm (julia-compat): Update to 3.25.0.
---
gnu/packages/julia-xyz.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index f00faf6223..7836489e15 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2020 Nicolò Balzarotti <nicolo@nixo.xyz>
+;;; Copyright © 2020, 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -25,7 +25,7 @@
(define-public julia-compat
(package
(name "julia-compat")
- (version "3.9.1")
+ (version "3.25.0")
(source
(origin
(method git-fetch)
@@ -34,7 +34,7 @@
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
- (base32 "01vwjr2134bzgnaxwd67knbibbhnfgnqjw7gxrp29s6y2a6j3882"))))
+ (base32 "1m4r5i8mq29xjp3mllh6047n5a78sdyld57m15anrnsjgaapcgby"))))
(build-system julia-build-system)
(home-page "https://github.com/JuliaLang/Compat.jl")
(synopsis "Compatibility across Julia versions")
--
2.30.0
From cc301e31e2fead723bd3a1d2a47ac8d31012de5d Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:11:42 +0100
Subject: [PATCH v4 05/11] gnu: Add julia-orderedcollections.

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

Toggle diff (32 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 7836489e15..ab5bba1bda 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -43,3 +43,25 @@ 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-orderedcollections
+ (package
+ (name "julia-orderedcollections")
+ (version "1.3.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaCollections/OrderedCollections.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0sfip1ixghsz91q2s7d62rgzw3gppg42fg6bccxlplqa3hfmbycf"))))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaCollections/OrderedCollections.jl")
+ (synopsis "Associative containers that preserve insertion order")
+ (description "This package implements @code{OrderedDicts} and
+@code{OrderedSets}, which are similar to containers in base Julia. However,
+during iteration the @code{Ordered*} containers return items in the order in
+which they were added to the collection.")
+ (license license:expat)))
--
2.30.0
From 373e5eddc67703d3315c19dd0f26609bd5a7dbc2 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:17:50 +0100
Subject: [PATCH v4 06/11] gnu: Add julia-datastructures.

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

Toggle diff (37 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index ab5bba1bda..bd7802b814 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -44,6 +44,30 @@ 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.18.9")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaCollections/DataStructures.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0hdqp8ipsqdw5bqqkdvz4j6n67x80sj5azr9vzyxwjfsgkfbnk2l"))))
+ (propagated-inputs
+ `(("julia-compat" ,julia-compat)
+ ("julia-orderedcollections" ,julia-orderedcollections)))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaCollections/DataStructures.jl")
+ (synopsis "Julia module providing different data structures")
+ (description "This package implements a variety of data structures,
+including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
+@code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
From c012a27c414e6568b4db8338b914862ed6da007b Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:25:02 +0100
Subject: [PATCH v4 07/11] gnu: Add julia-fixedpointnumbers.

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

Toggle diff (48 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index bd7802b814..b28906b546 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -68,6 +68,41 @@ including, @code{CircularBuffer}, @code{Queue}, @code{Stack},
@code{Accumulators}, @code{LinkedLists}, @code{SortedDicts} and many others.")
(license license:expat)))
+(define-public julia-fixedpointnumbers
+ (package
+ (name "julia-fixedpointnumbers")
+ (version "0.8.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaMath/FixedPointNumbers.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0j0n40n04q9sk68wh9jq90m6c67k4ws02k41djjzkrqmpzv4rcdi"))))
+ (build-system julia-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'disable-failing-test
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "test/fixed.jl"
+ ;; A deprecation warning is not thrown
+ (("@test_logs.*:warn" all) (string-append "# " all)))
+ #t)))))
+ (propagated-inputs `(("julia-compat" ,julia-compat)))
+ (home-page "https://github.com/JuliaMath/FixedPointNumbers.jl")
+ (synopsis "Fixed point types for Julia")
+ (description "@code{FixedPointNumbers.jl} implements fixed-point number
+types for Julia. 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-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
From 1a116a54820f5e0434bdffb7bdb837035a76c89d Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 18:27:32 +0100
Subject: [PATCH v4 08/11] gnu: Add julia-parsers.

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

Toggle diff (30 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index b28906b546..9a615aba58 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -124,3 +124,23 @@ digits (bits) after the decimal (radix) point.")
during iteration the @code{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")
+ (version "1.0.15")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaData/Parsers.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "16iffl6l28kspgqch48mhi1s8qhspr3cpqcwsph3rqi72lbfqygx"))))
+ (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.jl} is a collection of type parsers and
+utilities for Julia.")
+ (license license:expat)))
--
2.30.0
From 63d2bd90609ecddb25e9dd3c646739c1912e6e45 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Mon, 18 Jan 2021 23:46:51 +0100
Subject: [PATCH v4 09/11] gnu: Add julia-adapt.

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

Toggle diff (35 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 9a615aba58..2e0efb0b5a 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -22,6 +22,28 @@
#:use-module (guix git-download)
#:use-module (guix build-system julia))
+(define-public julia-adapt
+ (package
+ (name "julia-adapt")
+ (version "3.1.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaGPU/Adapt.jl")
+ (commit (string-append "v" version))))
+ (file-name "Adapt")
+ (sha256
+ (base32 "1lks6k3a1gvwlplld47nh6xfy3nnlpc0vhkzg6zg0qn33qdmavrg"))))
+ (build-system julia-build-system)
+ (home-page "https://github.com/JuliaGPU/Adapt.jl")
+ (synopsis "Package providing the @code{adapt} function, similar to @code{convert}")
+ (description "This Julia package provides the @code{adapt(T, x)} function
+acts like @code{convert(T, x)}, but without the restriction of returning a
+@code{T}. This allows you to \"convert\" wrapper types like @code{Adjoint} to
+be GPU compatible without throwing away the wrapper.")
+ (license license:expat)))
+
(define-public julia-compat
(package
(name "julia-compat")
--
2.30.0
From 6e5c1ccfd8a805e8b0b16ddeb4d56fc8f738b078 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:01:28 +0100
Subject: [PATCH v4 10/11] gnu: Add julia-offsetarrays.

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

Toggle diff (38 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 2e0efb0b5a..3dd731ef28 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -147,6 +147,31 @@ during iteration the @code{Ordered*} containers return items in the order in
which they were added to the collection.")
(license license:expat)))
+(define-public julia-offsetarrays
+ (package
+ (name "julia-offsetarrays")
+ (version "1.5.2")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaArrays/OffsetArrays.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1y3fnssw2hzyghrk6jfcxslab0f8sjkjszh482snfq4k6mkrhy77"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-adapt" ,julia-adapt)))
+ ;; CatIndices depends on OffsetArrays, introducing a recursive dependency
+ (arguments '(#:tests? #f))
+ (home-page "https://juliaarrays.github.io/OffsetArrays.jl/stable/")
+ (synopsis "Fortran-like arrays with arbitrary, zero or negative indices")
+ (description "@code{OffsetArrays.jl} 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.30.0
From 3da3028123253ebe69017607e3dc7c8825b47c51 Mon Sep 17 00:00:00 2001
From: nixo <nicolo@nixo.xyz>
Date: Tue, 19 Jan 2021 00:06:34 +0100
Subject: [PATCH v4 11/11] gnu: Add julia-json.

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

Toggle diff (38 lines)
diff --git a/gnu/packages/julia-xyz.scm b/gnu/packages/julia-xyz.scm
index 3dd731ef28..34dba958ce 100644
--- a/gnu/packages/julia-xyz.scm
+++ b/gnu/packages/julia-xyz.scm
@@ -125,6 +125,31 @@ 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-json
+ (package
+ (name "julia-json")
+ (version "0.21.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/JuliaIO/JSON.jl")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1f9k613kbknmp4fgjxvjaw4d5sfbx8a5hmcszmp1w9rqfqngjx9m"))))
+ (build-system julia-build-system)
+ (propagated-inputs
+ `(("julia-datastructures" ,julia-datastructures)
+ ("julia-fixedpointnumbers" ,julia-fixedpointnumbers)
+ ("julia-parsers" ,julia-parsers)
+ ("julia-offsetarrays" ,julia-offsetarrays)))
+ (home-page "https://github.com/JuliaIO/JSON.jl")
+ (synopsis "JSON parsing and printing library for Julia")
+ (description "@code{JSON.jl} is a pure Julia module which supports parsing
+and printing JSON documents.")
+ (license license:expat)))
+
(define-public julia-orderedcollections
(package
(name "julia-orderedcollections")
--
2.30.0
L
L
Ludovic Courtès wrote on 30 Jan 2021 15:10
Re: bug#45972: [PATCH] Add julia-json with dependencies
(name . Nicolò Balzarotti)(address . anothersms@gmail.com)(address . 45972-done@debbugs.gnu.org)
87k0rufrco.fsf_-_@gnu.org
Hi,

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

Toggle quote (2 lines)
> Done, I attached the updated patch set!

Applied it all, thanks a lot!

Ludo’.
Closed
Z
Z
zimoun wrote on 30 Jan 2021 15:46
Re: [bug#45972] Julia importer?
(address . 45972@debbugs.gnu.org)
86pn1mfpp1.fsf@gmail.com
Hi,

On Thu, 28 Jan 2021 at 01:30, Nicolò Balzarotti <anothersms@gmail.com> wrote:

Toggle quote (19 lines)
> Sure, I'd just read it from Package.toml (nowadays almost all the
> packages have this file, and for when it's missing we also have the
> julia-create-package-toml procedure that creates it).
>
> The file is toml, but I don't see a toml parser in guix. So, I'd use a
> function like the following:
>
> #+begin_src scheme
> (define (package.toml->name file)
> (call-with-input-file file
> (lambda (in)
> (let loop ((line (read-line in 'concat)))
> (if (eof-object? line)
> #f ;What to do?
> (let ((m (string-match "name\\s*=\\s*\"(.*)\"" line)))
> (if m (match:substring m 1)
> (loop (read-line in 'concat)))))))))
> #+end_src

[...]

Toggle quote (5 lines)
> The other way I think this is easily solvable is by asking julia
> directly, by reading the output of:
>
> (invoke-julia "using Pkg; Pkg.TOML.parsefile("Project.toml")["name"] |> println")

With a bit more glue, could this be transformed into something like
“julia->guix-package”? And so have a Julia package importer, even if it
fails for some cases.

WDYT?


All the best,
simon
N
N
Nicolò Balzarotti wrote on 30 Jan 2021 21:13
(address . 45972@debbugs.gnu.org)
8735yi9o9x.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
zimoun <zimon.toutoune@gmail.com> writes:

Toggle quote (2 lines)
> Hi,

Hi Simon!

Toggle quote (7 lines)
>>
>> (invoke-julia "using Pkg; Pkg.TOML.parsefile("Project.toml")["name"] |> println")
>
> With a bit more glue, could this be transformed into something like
> “julia->guix-package”? And so have a Julia package importer, even if it
> fails for some cases.

Well, if you mean "Can we use Pkg.jl to generate package definitions for
us?" the answer is "probably yes, but I never investigated this". That
line uses just Julia Base TOML.jl, which for some reason is defined
inside module Pkg.jl (and it's not top-level).

If you instead meant "Can we have a Julia importer?" some time ago I
wrote one in Julia, I've not used it in the last year, but it did work
quite well back then. I attach it here for reference.

But before digging into Pkg3, I need to push a new set of packages which
contains julia-jllwrappers, which is needed for Julia packages which
require binary distributions to work. After that, it will be possible
to create an importer that work "ok" even with packages depending on
.so libraries.
Attachment: import.jl
N
Z
Z
zimoun wrote on 31 Jan 2021 20:35
(address . 45972@debbugs.gnu.org)
86y2g8ew7o.fsf@gmail.com
Hi,

On Sat, 30 Jan 2021 at 21:13, Nicolò Balzarotti <anothersms@gmail.com> wrote:
Toggle quote (13 lines)
> zimoun <zimon.toutoune@gmail.com> writes:

>>> (invoke-julia "using Pkg; Pkg.TOML.parsefile("Project.toml")["name"] |> println")
>>
>> With a bit more glue, could this be transformed into something like
>> “julia->guix-package”? And so have a Julia package importer, even if it
>> fails for some cases.
>
> Well, if you mean "Can we use Pkg.jl to generate package definitions for
> us?" the answer is "probably yes, but I never investigated this". That
> line uses just Julia Base TOML.jl, which for some reason is defined
> inside module Pkg.jl (and it's not top-level).

I mean the correct way is to write a TOML parser, probably using PEG.
As it is done with the other importers.

It is a piece of work. Not especially hard but it could take some time.

So instead, the question is, using a bit of Julia glue and Guile glue,
is it possible to extract the necessary information to have a Guix
package?

Well, maybe these glue code is the same as writing a TOML parser. :-)


Toggle quote (4 lines)
> If you instead meant "Can we have a Julia importer?" some time ago I
> wrote one in Julia, I've not used it in the last year, but it did work
> quite well back then. I attach it here for reference.

Fun!

One thing is how to deal with ’Manifest.toml’. And pre-compiled
substitutes do not make too much sense in the Julia world. Well, I do
not know how these Manifest.toml overlap with how Guix works.


Cheers,
simon
N
N
Nicolò Balzarotti wrote on 31 Jan 2021 21:00
(address . 45972@debbugs.gnu.org)
87lfc8yizu.fsf@guixSD.i-did-not-set--mail-host-address--so-tickle-me
Toggle quote (4 lines)
> I mean the correct way is to write a TOML parser, probably using PEG.
> As it is done with the other importers.
> It is a piece of work. Not especially hard but it could take some time.

That wouldn't be too hard, but also it would not be enough. As you can
see in [fn:1], there's just the list of dependencies, but no info on how
to get them, so parsing the Julia General Registry [fn:2] is still required.

Toggle quote (6 lines)
> So instead, the question is, using a bit of Julia glue and Guile glue,
> is it possible to extract the necessary information to have a Guix
> package?
>
> Well, maybe these glue code is the same as writing a TOML parser. :-)

This might be feasible, but as I said above, unfortunately I don't think
that a TOML parser would be enough. But asking "Pkg3" to resolve
dependencies for us, yes, this makes sense.

Toggle quote (3 lines)
> One thing is how to deal with ’Manifest.toml’. And pre-compiled
> substitutes do not make too much sense in the Julia world. Well, I do
> not know how these Manifest.toml overlap with how Guix works.
WDYM? Julia uses .ji files (which are the analogoues of .go for guile
and .pyc for python), if this is what you are referring to.

I'm just ignoring Manifest.toml, which should be the same as venv in the
python world.

Z
Z
zimoun wrote on 1 Feb 2021 08:22
(address . 45972@debbugs.gnu.org)
86sg6gdzgm.fsf@gmail.com
Hi,

On Sun, 31 Jan 2021 at 21:00, Nicolò Balzarotti <anothersms@gmail.com> wrote:

Toggle quote (4 lines)
> That wouldn't be too hard, but also it would not be enough. As you can
> see in [fn:1], there's just the list of dependencies, but no info on how
> to get them, so parsing the Julia General Registry [fn:2] is still required.

[...]

Toggle quote (3 lines)
> I'm just ignoring Manifest.toml, which should be the same as venv in the
> python world.

Sorry, you have right. I have misremembered an old presentation about
Pkg3 by Stefan Karpinski.

Well, thanks for the pointers. And I gave a look at the Pkg doc. ;-)

Once a PEG parser for TOML files is written, all the information is in
the Registry (by default this General repository), recursively.

However, the “resolve” part is not straightforward, IMHO. It is what
confused me in my previous email and I thought was “Manifest.toml”.
Anyway.

Instead of reinventing the wheel and reimplement Pkg.jl in Guix, maybe
it is worth to have Julia code as you did that extracts the relevant
information and then generates the relevant Guix packages. However, it
should mean that “guix import julia” requires to have the package julia
implicitly used. Why not. :-)


Cheers,
simon
?