Subject: [PATCH] gnu: guile-proba: Fix environment vars in Guile Proba's script.

From: Fabio Natali <[email-masked]>
Date: Wed, 4 Oct 2023 11:20:30 +0100

* gnu/packages/check.scm (guile-proba): Micro fix.

Guile Proba's CLI script, as created via Guix's `wrap-program', should take
into account (as opposed to discard) the original, user-defined values of
`GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH'.

Currently, Guile Proba's CLI script is unable to find any third-party library
needed by the app being tested. This micro change should fix this.
---
Hi,

I think there might be a slight PATH-related issue in the way guile-proba is currently packaged. Specifically, I think it should be:

#+begin_src scheme :noeval
`("GUILE_LOAD_PATH" prefix (,(getenv "GUILE_LOAD_PATH")))
`("GUILE_LOAD_COMPILED_PATH" prefix (,(getenv "GUILE_LOAD_COMPILED_PATH")))))))
#+end_src

as opposed to the way it's now:

#+begin_src scheme :noeval
`("GUILE_LOAD_PATH" = (,(getenv "GUILE_LOAD_PATH")))
`("GUILE_LOAD_COMPILED_PATH" = (,(getenv "GUILE_LOAD_COMPILED_PATH")))))))
#+end_src

The current version results in the following CLI program:

#+begin_export ascii
user@host:~/staging/guix$ guix shell --container --link-profile coreutils guile-proba -- cat ~/.guix-profile/bin/proba
#!/gnu/store/9vw5slrffp27rzy2i2plnw7xfqjyk7m4-bash-minimal-5.1.16/bin/bash
export GUILE_LOAD_PATH="/gnu/store/2k854q6limcmiinqsysc7r5p3x61spcj-guile-proba-0.3.0/share/guile/site/3.0:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/share/guile/site/3.0:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/share/guile/site/3.0"
export GUILE_LOAD_COMPILED_PATH="/gnu/store/2k854q6limcmiinqsysc7r5p3x61spcj-guile-proba-0.3.0/lib/guile/3.0/site-ccache/:/gnu/store/2k854q6limcmiinqsysc7r5p3x61spcj-guile-proba-0.3.0/lib/guile/3.0/site-ccache:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/lib/guile/3.0/site-ccache:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/share/guile/site/3.0:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/lib/guile/3.0/site-ccache:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/share/guile/site/3.0"
exec -a "$0" "/gnu/store/2k854q6limcmiinqsysc7r5p3x61spcj-guile-proba-0.3.0/bin/.proba-real" "$@"
#+end_export

whereas I think the script should read (with this micro-patch):

#+begin_export ascii
user@host:~/staging/guix$ ./pre-inst-env guix shell --container --link-profile coreutils guile-proba -- cat ~/.guix-profile/bin/proba
#!/gnu/store/9vw5slrffp27rzy2i2plnw7xfqjyk7m4-bash-minimal-5.1.16/bin/bash
export GUILE_LOAD_PATH="/gnu/store/ibkh3kvhg5ky3xa9f49b48iv3wk0l1lk-guile-proba-0.3.0/share/guile/site/3.0:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/share/guile/site/3.0:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/share/guile/site/3.0${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH"
export GUILE_LOAD_COMPILED_PATH="/gnu/store/ibkh3kvhg5ky3xa9f49b48iv3wk0l1lk-guile-proba-0.3.0/lib/guile/3.0/site-ccache/:/gnu/store/ibkh3kvhg5ky3xa9f49b48iv3wk0l1lk-guile-proba-0.3.0/lib/guile/3.0/site-ccache:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/lib/guile/3.0/site-ccache:/gnu/store/wfhc8rbbmd0z25frrb5skhwcz242092i-guile-config-0.5.1/share/guile/site/3.0:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/lib/guile/3.0/site-ccache:/gnu/store/bc3zzjych6jyp4ph2af9k3w8qcs3nsn2-guile-lib-0.2.7/share/guile/site/3.0${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
exec -a "$0" "/gnu/store/ibkh3kvhg5ky3xa9f49b48iv3wk0l1lk-guile-proba-0.3.0/bin/.proba-real" "$@"
#+end_export

As a result of this, currently, Guile Proba's CLI script is unable to find any third-party library needed by the app being tested. This micro change should fix this.

This can be tested as follows.

#+begin_export shell :noeval
$ tree
.
├── foo.scm
└── tests
    └── test-main.scm
#+end_export

#+begin_src scheme :noeval
;; foo.scm
(define-module (foo)
  #:use-module (ini)
  #:export (bar))

(define (bar)
  (call-with-input-string "[foo]\nbar=baz\n" ini->scm))
#+end_src

#+begin_src scheme :noeval
;; test-main.scm
(define-module (test-main)
  #:use-module (foo)
  #:use-module (srfi srfi-64))

(test-begin "main")

(test-equal "main"
  (bar)
  '(("foo" ("bar" . "baz"))))

(test-end "main")
#+end_src

With the above files in place:

#+begin_src shell :noeval
$ proba run tests
[...]
ice-9/boot-9.scm:3330:6: In procedure resolve-interface:
no code for module (ini)
#+end_src

What do you think? I hope the change looks fine.

Thanks, best, Fabio.

 gnu/packages/check.scm | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 5af3b49280..e3c32c17c2 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -3599,8 +3599,8 @@ (define-public guile-proba
                 (copy-file "proba.scm" script)
                 (chmod script #o555)
                 (wrap-program script
-                  `("GUILE_LOAD_PATH" = (,(getenv "GUILE_LOAD_PATH")))
-                  `("GUILE_LOAD_COMPILED_PATH" =
+                  `("GUILE_LOAD_PATH" prefix (,(getenv "GUILE_LOAD_PATH")))
+                  `("GUILE_LOAD_COMPILED_PATH" prefix
                     (,(getenv "GUILE_LOAD_COMPILED_PATH")))))))
           (add-after 'install 'install-manual
             (lambda* (#:key outputs #:allow-other-keys)

base-commit: 24fc0370d0d12f34cffd44801cc6382fc5cc5f23
-- 
2.41.0