Message ID | REtOheZAbpl8H2a73GxbVc3Iegd9VNhDv1PO6AAPng_t2opK95fuNXoXbHewNb3YvYv62CcJP4jQEPTKxpH9VXEjAjxS7cy-jcsd4glk56Q=@protonmail.com |
---|---|
State | New |
Headers | show |
Series | [bug#60386] gnu: Add guile-proba. | expand |
Hi Luis, Luis Felipe via Guix-patches via <guix-patches@gnu.org> writes: > Hello again, > > This is a new patch with guile-proba version 0.3.0, which solves the missing module import problem. Thank you for working on this, both upstream and the package itself. > [snip] > + > +(define-public guile-proba > + (package > + (name "guile-proba") > + (version "0.3.0") > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://codeberg.org/luis-felipe/guile-proba") > + (commit version))) > + (file-name (git-file-name name version)) > + (sha256 > + (base32 "1mjnrbb6gv5f95i1ihn75yh7ya445pcnj13cy34x2v58h9n2r80s")))) > + (build-system guile-build-system) > + (inputs (list bash-minimal)) > + (native-inputs (list guile-3.0 texinfo)) I think guile should be a normal input. Other packages like this (e.g. guilescript, ccwl) seem to do it that way. > + (propagated-inputs (list guile-config guile-lib)) > + (arguments > + (list > + #:phases > + #~(modify-phases %standard-phases > + (add-after 'build 'check > + (lambda _ > + (invoke "guile" "proba.scm" "run" "tests"))) > + (add-after 'install 'install-wrapped-script > + (lambda* (#:key outputs #:allow-other-keys) > + (let* ((out (assoc-ref outputs "out")) > + (version (target-guile-effective-version)) > + (scm (string-append "/share/guile/site/" version)) > + (go (string-append "/lib/guile/" version "/site-ccache")) > + (bin-dir (string-append out "/bin")) > + (script (string-append bin-dir "/proba"))) > + (mkdir-p bin-dir) > + (copy-file "proba.scm" script) > + (chmod script #o555) > + (wrap-program script > + `("GUILE_LOAD_PATH" prefix > + (,(string-append out scm))) > + `("GUILE_LOAD_COMPILED_PATH" prefix > + (,(string-append out go))))))) This seems almost correct, as it extends the GUILE_LOAD_{,COMPILED}_PATH at runtime; the user would for still need to have the guile-config and guile in their profile. Although guile-config is also listed as a propagated input, when the guile search paths specifications are not active, the following would not work: `guix shell --pure guile-proba -- proba run tests' You could have a look at the 'wrap phase of the ccwl package; they use the value of (getenv "GUILE_LOAD_{,COMPILED}_PATH") retrieved while building the package to wrap their script. > + (add-after 'install 'install-manual > + (lambda* (#:key outputs #:allow-other-keys) > + (let* ((out (assoc-ref outputs "out")) > + (info-dir (string-append out "/share/info"))) > + (mkdir-p info-dir) > + (invoke "makeinfo" "manual/main.texi") > + (install-file "guile-proba" info-dir))))) Nitpick, so feel free to ignore: You could split up building and installing the manual. > + #:not-compiled-file-regexp > + "((bogus|bogus-tests|packages|tests)\\/.*.scm|(proba|manifest).scm)$")) All of the files listed in this regex are still installed in <out>/share/guile/site/3.0. Do you think it would be possible to ensure these files are not installed? > + (home-page "https://luis-felipe.gitlab.io/guile-proba/") > + (synopsis "Testing tools for GNU Guile projects with SRFI 64 test suites") > + (description > + "This software is a set of testing tools for GNU Guile projects > +with SRFI 64-based test suites. It comes with a command-line interface > +to run test collections, and a library that includes a test runner and > +helpers for writing tests.") > + (license license:public-domain))) > > base-commit: fc5dc3e04789a15d80a7b35987adaefc1a94b97c > -- > 2.38.1
Hi Jelle, thanks for taking a look. I'm sending a new patch after this message, but I'm replying to your review below. On Monday, February 13th, 2023 at 13:44, Jelle Licht <jlicht@fsfe.org> wrote: > > + (native-inputs (list guile-3.0 texinfo)) > > > I think guile should be a normal input. Other packages like this > (e.g. guilescript, ccwl) seem to do it that way. I moved it to inputs now. But I placed it in native-inputs following the guile-build-system documentation in the manual: "Packages built with ‘guile-build-system’ must provide a Guile package in their ‘native-inputs’ field." Did I misunderstand or should that part of the manual be updated? > > + (propagated-inputs (list guile-config guile-lib)) > > + (arguments > > + (list > > + #:phases > > + #~(modify-phases %standard-phases > > + (add-after 'build 'check > > + (lambda _ > > + (invoke "guile" "proba.scm" "run" "tests"))) > > + (add-after 'install 'install-wrapped-script > > + (lambda* (#:key outputs #:allow-other-keys) > > + (let* ((out (assoc-ref outputs "out")) > > + (version (target-guile-effective-version)) > > + (scm (string-append "/share/guile/site/" version)) > > + (go (string-append "/lib/guile/" version "/site-ccache")) > > + (bin-dir (string-append out "/bin")) > > + (script (string-append bin-dir "/proba"))) > > + (mkdir-p bin-dir) > > + (copy-file "proba.scm" script) > > + (chmod script #o555) > > + (wrap-program script > > + `("GUILE_LOAD_PATH" prefix + (,(string-append out scm))) +` ("GUILE_LOAD_COMPILED_PATH" prefix > > + (,(string-append out go))))))) > > > This seems almost correct, as it extends the GUILE_LOAD_{,COMPILED}PATH > at runtime; the user would for still need to have the guile-config and > guile in their profile. Although guile-config is also listed as a > propagated input, when the guile search paths specifications are not > active, the following would not work: > > `guix shell --pure guile-proba -- proba run tests' > > You could have a look at the 'wrap phase of the ccwl package; they use > the value of (getenv "GUILE_LOAD{,COMPILED}_PATH") retrieved while > building the package to wrap their script. I added a new phase to set Guile load paths so that they take (getenv "GUILE_LOAD{,COMPILED}_PATH") into account, and modified the wrapping accordingly. In my test, running "guix shell --pure guile-proba -- proba run tests" works now. > > + (add-after 'install 'install-manual > > + (lambda* (#:key outputs #:allow-other-keys) > > + (let* ((out (assoc-ref outputs "out")) > > + (info-dir (string-append out "/share/info"))) > > + (mkdir-p info-dir) > > + (invoke "makeinfo" "manual/main.texi") > > + (install-file "guile-proba" info-dir))))) > > Nitpick, so feel free to ignore: > You could split up building and installing the manual. I put building into a separate phase. > > + #:not-compiled-file-regexp > > + "((bogus|bogus-tests|packages|tests)\\/.*.scm|(proba|manifest).scm)$")) > > > All of the files listed in this regex are still installed in > <out>/share/guile/site/3.0. Do you think it would be possible to ensure > these files are not installed? It was possible. Now it looks like this: /gnu/store/xaqmf7n83h5dq9xv6is46ybjk98ssakr-guile-proba-0.3.0 |-- bin | `-- proba |-- lib | `-- guile | `-- 3.0 | `-- site-ccache | `-- proba | |-- cli.go | |-- commands.go | |-- runners.go | |-- templates.go | `-- utils.go `-- share |-- doc | `-- guile-proba-0.3.0 | |-- README.org | `-- index.html |-- guile | `-- site | `-- 3.0 | `-- proba | |-- cli.scm | |-- commands.scm | |-- runners.scm | |-- templates.scm | `-- utils.scm `-- info `-- guile-proba
Hi Luis, Pushed to master! Some comments still follow. Luis Felipe <luis.felipe.la@protonmail.com> writes: > Hi Jelle, thanks for taking a look. > > I'm sending a new patch after this message, but I'm replying to your review below. > > > On Monday, February 13th, 2023 at 13:44, Jelle Licht <jlicht@fsfe.org> wrote: > >> > + (native-inputs (list guile-3.0 texinfo)) >> > >> > >> I think guile should be a normal input. Other packages like this >> (e.g. guilescript, ccwl) seem to do it that way. > > I moved it to inputs now. But I placed it in native-inputs following the guile-build-system documentation in the manual: > > "Packages built with ‘guile-build-system’ must provide a Guile package in their ‘native-inputs’ field." > > Did I misunderstand or should that part of the manual be updated? You are correct, but in order to cleanly cross compile, we'd need to: - add guile to both inputs (for the shebang) and native-inputs (for cross compilation) - add all guile libraries to both propagated-inputs and native-inputs - ensure all guile libraries we depend on can be cross compiled. - rework the `(getenv ...)' trick again, to be constructed out of the guile libraries in (propagated-)inputs, instead of the native-inputs. A quick bit of research makes me think guix is one of few packages written in guile using autotools that supports cross compilation. I think we can just leave the entire cross-compilation thing to be done later, and then have it be done properly for all guile packages at once. >> > + (propagated-inputs (list guile-config guile-lib)) >> > + (arguments >> > + (list >> > + #:phases >> > + #~(modify-phases %standard-phases >> > + (add-after 'build 'check >> > + (lambda _ >> > + (invoke "guile" "proba.scm" "run" "tests"))) >> > + (add-after 'install 'install-wrapped-script >> > + (lambda* (#:key outputs #:allow-other-keys) >> > + (let* ((out (assoc-ref outputs "out")) >> > + (version (target-guile-effective-version)) >> > + (scm (string-append "/share/guile/site/" version)) >> > + (go (string-append "/lib/guile/" version "/site-ccache")) >> > + (bin-dir (string-append out "/bin")) >> > + (script (string-append bin-dir "/proba"))) >> > + (mkdir-p bin-dir) >> > + (copy-file "proba.scm" script) >> > + (chmod script #o555) >> > + (wrap-program script >> > + `("GUILE_LOAD_PATH" prefix + (,(string-append out scm))) +` ("GUILE_LOAD_COMPILED_PATH" prefix >> > + (,(string-append out go))))))) >> > >> > >> This seems almost correct, as it extends the GUILE_LOAD_{,COMPILED}PATH >> at runtime; the user would for still need to have the guile-config and >> guile in their profile. Although guile-config is also listed as a >> propagated input, when the guile search paths specifications are not >> active, the following would not work: >> > >> `guix shell --pure guile-proba -- proba run tests' >> > >> You could have a look at the 'wrap phase of the ccwl package; they use >> the value of (getenv "GUILE_LOAD{,COMPILED}_PATH") retrieved while >> building the package to wrap their script. > > I added a new phase to set Guile load paths so that they take (getenv "GUILE_LOAD{,COMPILED}_PATH") into account, and modified the wrapping accordingly. In my test, running "guix shell --pure guile-proba -- proba run tests" works now. > > >> > + (add-after 'install 'install-manual >> > + (lambda* (#:key outputs #:allow-other-keys) >> > + (let* ((out (assoc-ref outputs "out")) >> > + (info-dir (string-append out "/share/info"))) >> > + (mkdir-p info-dir) >> > + (invoke "makeinfo" "manual/main.texi") >> > + (install-file "guile-proba" info-dir))))) >> > >> Nitpick, so feel free to ignore: >> You could split up building and installing the manual. > > I put building into a separate phase. > > >> > + #:not-compiled-file-regexp >> > + "((bogus|bogus-tests|packages|tests)\\/.*.scm|(proba|manifest).scm)$")) >> > >> > >> All of the files listed in this regex are still installed in >> <out>/share/guile/site/3.0. Do you think it would be possible to ensure >> these files are not installed? > > It was possible. Now it looks like this: > > /gnu/store/xaqmf7n83h5dq9xv6is46ybjk98ssakr-guile-proba-0.3.0 > |-- bin > | `-- proba > |-- lib > | `-- guile > | `-- 3.0 > | `-- site-ccache > | `-- proba > | |-- cli.go > | |-- commands.go > | |-- runners.go > | |-- templates.go > | `-- utils.go > `-- share > |-- doc > | `-- guile-proba-0.3.0 > | |-- README.org > | `-- index.html > |-- guile > | `-- site > | `-- 3.0 > | `-- proba > | |-- cli.scm > | |-- commands.scm > | |-- runners.scm > | |-- templates.scm > | `-- utils.scm > `-- info > `-- guile-proba
From 528f7d43933aa5e5a5528499b852ed274f33e406 Mon Sep 17 00:00:00 2001 From: Luis Felipe <luis.felipe.la@protonmail.com> Date: Wed, 28 Dec 2022 12:45:32 -0500 Subject: [PATCH] gnu: Add guile-proba. * gnu/packages/check.scm (guile-proba): New variable. --- gnu/packages/check.scm | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm index aaa41777dc..c5b3b825e1 100644 --- a/gnu/packages/check.scm +++ b/gnu/packages/check.scm @@ -41,6 +41,7 @@ ;;; Copyright © 2022 David Elsing <david.elsing@posteo.net> ;;; Copyright © 2022 Sharlatan Hellseher <sharlatanus@gmail.com> ;;; Copyright © 2022 jgart <jgart@dismail.de> +;;; Copyright © 2023 Luis Felipe López Acevedo <luis.felipe.la@protonmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -70,6 +71,8 @@ (define-module (gnu packages check) #:use-module (gnu packages gnome) #:use-module (gnu packages golang) #:use-module (gnu packages gtk) + #:use-module (gnu packages guile) + #:use-module (gnu packages guile-xyz) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) @@ -78,6 +81,7 @@ (define-module (gnu packages check) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages python-science) + #:use-module (gnu packages texinfo) #:use-module (gnu packages time) #:use-module (gnu packages xml) #:use-module (guix utils) @@ -90,6 +94,7 @@ (define-module (gnu packages check) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system gnu) #:use-module (guix build-system go) + #:use-module (guix build-system guile) #:use-module (guix build-system meson) #:use-module (guix build-system pyproject) #:use-module (guix build-system python) @@ -3455,3 +3460,61 @@ (define-public python-pytest-regressions tables by saving expected data in a data directory (courtesy of pytest-datadir) that can be used to verify that future runs produce the same data.") (license license:expat))) + +(define-public guile-proba + (package + (name "guile-proba") + (version "0.3.0") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://codeberg.org/luis-felipe/guile-proba") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 "1mjnrbb6gv5f95i1ihn75yh7ya445pcnj13cy34x2v58h9n2r80s")))) + (build-system guile-build-system) + (inputs (list bash-minimal)) + (native-inputs (list guile-3.0 texinfo)) + (propagated-inputs (list guile-config guile-lib)) + (arguments + (list + #:phases + #~(modify-phases %standard-phases + (add-after 'build 'check + (lambda _ + (invoke "guile" "proba.scm" "run" "tests"))) + (add-after 'install 'install-wrapped-script + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (version (target-guile-effective-version)) + (scm (string-append "/share/guile/site/" version)) + (go (string-append "/lib/guile/" version "/site-ccache")) + (bin-dir (string-append out "/bin")) + (script (string-append bin-dir "/proba"))) + (mkdir-p bin-dir) + (copy-file "proba.scm" script) + (chmod script #o555) + (wrap-program script + `("GUILE_LOAD_PATH" prefix + (,(string-append out scm))) + `("GUILE_LOAD_COMPILED_PATH" prefix + (,(string-append out go))))))) + (add-after 'install 'install-manual + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (info-dir (string-append out "/share/info"))) + (mkdir-p info-dir) + (invoke "makeinfo" "manual/main.texi") + (install-file "guile-proba" info-dir))))) + #:not-compiled-file-regexp + "((bogus|bogus-tests|packages|tests)\\/.*.scm|(proba|manifest).scm)$")) + (home-page "https://luis-felipe.gitlab.io/guile-proba/") + (synopsis "Testing tools for GNU Guile projects with SRFI 64 test suites") + (description + "This software is a set of testing tools for GNU Guile projects +with SRFI 64-based test suites. It comes with a command-line interface +to run test collections, and a library that includes a test runner and +helpers for writing tests.") + (license license:public-domain))) base-commit: fc5dc3e04789a15d80a7b35987adaefc1a94b97c -- 2.38.1