[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#65313] [PATCH 0/1] gnu: Add erlang-lfe.
From: |
Tim Johann |
Subject: |
[bug#65313] [PATCH 0/1] gnu: Add erlang-lfe. |
Date: |
Wed, 06 Sep 2023 17:53:42 +0200 |
User-agent: |
mu4e 1.10.5; emacs 29.0.92 |
Hi Maxim,
Thanks for the review. I learned a lot.
Is there more documentation on the #:modules specification? I would like to
know if there is a variable containing the modules added to the builder file
when not specifying #:modules in the arguments? Or do I need to repeat them
there, as I have done so far:
#:modules '((ice-9 ftw)
(srfi srfi-26)
(guix build gnu-build-system)
(guix build utils))
The (guix build _) modules are the ones that are present when I don't use the
#:modules argument. ftw is for 'scandir' and srfi-26 - as you suggested - for
'cut'
Other than that, I have a working package declaration for erlang-lfe with your
suggestions incorporated. I would just like to know the answer to above
question, before I submit the revision.
Thank you very much indeed.
- Tim
Maxim Cournoyer <maxim.cournoyer@gmail.com> writes:
> tags 65313 + moreinfo
> quit
>
> Hello,
>
> Tim Johann <t1m@phrogstar.de> writes:
>
>> ---
>> gnu/packages/erlang.scm | 77 +++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 77 insertions(+)
>>
>> diff --git a/gnu/packages/erlang.scm b/gnu/packages/erlang.scm
>> index a7f161647b..df7212b0e5 100644
>> --- a/gnu/packages/erlang.scm
>> +++ b/gnu/packages/erlang.scm
>> @@ -738,3 +738,80 @@ (define-public rebar3-proper
>> (description "This plugin allows running PropEr test suites from within
>> rebar3.")
>> (license license:bsd-3)))
>> +
>> +(define-public erlang-lfe
>> + (package
>> + (name "erlang-lfe")
>> + (version "2.1.2")
>> + (source
>> + (origin
>> + (method git-fetch)
>> + ;; The tarball from <http://erlang.org/download> contains many
>> + ;; pre-compiled files, so we use this snapshot of the source
>> + ;; repository.
>> + (uri (git-reference
>> + (url "<https://github.com/lfe/lfe>")
>> + (commit "v2.1.2")))
>> + (file-name (git-file-name name version))
>> + (sha256
>> + (base32
>> + "180hz1p2v3vb6yyzcfwircmljlnd86ln8z80lzy3mwlyrcxblvxy"))))
>> + (build-system gnu-build-system)
>> + (native-inputs
>> + (list rebar3 rebar3-proper erlang-proper))
>> + (propagated-inputs
>> + (list erlang))
>
> Nitpick: less than 5 dependencies can fit be formatted on the same line,
> if it fits, e.g.
>
> (native-inputs (list rebar3 rebar3-proper erlang-proper))
>
> Otherwise the convention is to use something like
>
> (native-inputs
> (list package1
> package2
> ...))
>
> Or let 'guix style' take care of it.
>
>> + (arguments
>> + `(#:phases
>
> New packages should use gexps for arguments, so something like
> (arguments
> (list #:phases #~(modify-phases %standard-phases
> ...)))
>
>> + (modify-phases %standard-phases
>> + (delete 'configure)
>> +
>> + ;; The following is inspired by rebar-build-system.scm
>> + (add-before 'check 'erlang-depends
>> + (lambda* (#:key inputs #:allow-other-keys)
>> + (use-modules (ice-9 ftw))
>> + (define input-directories
>> + (map (lambda (p) (cdr (assoc p inputs)))
>> + '("rebar3-proper" "erlang-proper")))
>
> It's not typically safe to call use-modules elsewhere than at the top
> level (it would cause problems with macros). For imports, you should
> use the #:modules build argument. Here you could also simply use
>
> (define input-directories (list #$(this-package-input "rebar3-proper")
> #$(this-package-input "erlang-proper")))
>
> since there are only 2 items.
>
>
>> + (mkdir-p "_checkouts")
>> + (for-each
>> + (lambda (input-dir)
>> + (let ((elibdir (string-append input-dir "/lib/erlang/lib")))
>> + (when (directory-exists? elibdir)
>> + (for-each
>> + (lambda (dirname)
>> + (let ((src (string-append elibdir "/" dirname))
>> + (dest (string-append "_checkouts/" dirname)))
>> + (when (not (file-exists? dest))
>> + ;; symlinking will not work, since rebar3 will
>> try
>> + ;; to overwrite the _build directory several
>> times
>> + ;; with the contents of _checkout, so we copy the
>> + ;; directory tree to _checkout and make it
>> writeable.
>> + (copy-recursively src dest #:follow-symlinks? #t)
>> + (for-each
>> + (lambda (file)
>> + (chmod file #o777))
>> + (find-files dest)))))
>
> If you add (srfi srfi-26) to #:modules, you can express this more
> succintly with:
>
> (for-each (cut chmod <> #o777)
> (find-files dest))
>
>> + (scandir elibdir
>> + (lambda (file)
>> + (and (not (member file '("." "..")))
>> + (file-is-directory? (string-append
>> elibdir "/" file)))))))))
>
> Please format the code to stay within 80 columns of text. 'guix lint'
> should report that.
>
>> + input-directories)))
>> +
>> + (replace 'check
>> + (lambda* (#:key tests? #:allow-other-keys)
>> + (when tests?
>> + (begin
>> + ;;(setenv "DEBUG" "1")
>> + (setenv "REBAR_CACHE_DIR" "/tmp")
>> + (invoke "make" "tests"))))))
>
> If the tests take time and they can not in parallel, the "-j" option
> should be provided with the (number->string (parallel-job-count)) value.
>
>> + #:make-flags
>> + (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
>> + "CC=gcc")))
>
> This should use gexps as well, replacing the assoc-ref above with just
> #$output.
------------------------------------------------------------------------
Tim Johann
AIH Staff Scientist
Klaus-Tschira-Institute for Computational Cardiology, Bioinformatics,
Internal Medicine III
University Hospital Heidelberg
Im Neuenheimer Feld 669
D-69120 Heidelberg
Tel.: (+49) 6221 56 39 12 6
*AI Health innovation Cluster*
<https://www.aih-cluster.ai/>
</home/t1m/.emacs.d/user/org-msg-signature/aih-cluster-logo.png>
A collaboration of DKFZ, EMBL, Heidelberg University, Heidelberg University
Hospital,
University Hospital Mannheim, Central Institute of Mental Health, and the Max
Planck
Institute for Medical Research
------------------------------------------------------------------------