guix-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[bug#45972] [PATCH] Add julia-json with dependencies


From: Nicolò Balzarotti
Subject: [bug#45972] [PATCH] Add julia-json with dependencies
Date: Thu, 28 Jan 2021 01:30:24 +0100

> 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.

> 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

>
> Sorry for not noticing earlier!
>
np and thanks again!





reply via email to

[Prev in Thread] Current Thread [Next in Thread]