unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
From: Efraim Flashner <efraim@flashner.co.il>
To: Tom Willemse <tom@ryuslash.org>
Cc: help-guix@gnu.org
Subject: Re: SCSH libraries search path
Date: Mon, 14 Nov 2022 14:47:58 +0200	[thread overview]
Message-ID: <Y3I4/j5OPs3f1GQU@3900XT> (raw)
In-Reply-To: <87k03ymkce.fsf@ryuslash.org>


[-- Attachment #1.1: Type: text/plain, Size: 2977 bytes --]

On Sun, Nov 13, 2022 at 04:49:05PM -0800, Tom Willemse wrote:
> Hey Efraim,
> 
> Efraim Flashner <efraim@flashner.co.il> writes:
> 
> > On Mon, Oct 31, 2022 at 12:18:50AM -0700, Tom Willemse wrote:
> >> Hey Guix \o/
> >> 
> >> I've been wanting to package one of my little scripts in Guix Home and
> >> it uses a little library I wrote for SCSH. I've been looking at how
> >> Search Paths work and I'm having trouble figuring out how to make this
> >> work.
> >> 
> >> Search paths seem easy enough generally, I was able to add a simple
> >> addition to my configuration by just adding this to the scsh package
> >> definition:
> >> 
> >>     (native-search-paths
> >>      (list (search-path-specification
> >>             (variable "SCSH_LIB_DIRS")
> >>             (files '("share/scsh/site")))))
> >
> > Try adding the 'separator' field, so it would look like this:
> >
> >      (native-search-paths
> >       (list (search-path-specification
> >              (variable "SCSH_LIB_DIRS")
> >              (separator " ")
> >              (files '("share/scsh/site")))))
> 
> Thanks for the suggestion! Unfortunately this gets me a value of
> `SCSH_LIB_DIRS' like
> 
>     /home/chelys/.guix-home/profile/share/scsh-0.7
> 
> which, when I try the command `scsh -ll mpd.scm -o mpd' causes the
> following error to appear:
> 
>     error: Illegal path element in $SCSH_LIB_DIRS
>     $SCSH_LIB_DIRS: /home/chelys/.guix-home/profile/share/scsh-0.7
>     The following element is not a string or #f: /home/chelys/.guix-home/profile/share/scsh-0.7
> 
> It's because SCSH treats the contents of `SCSH_LIB_DIRS' as "a sequence
> of of s-expressions, which are `read' from the string"[1] and supports
> either string values or the value #f. So `SCSH_LIB_DIRS' would have to
> be in this case:
> 
>     "/home/chelys/.guix-home/profile/share/scsh-0.7"
> 
> I guess this just isn't supported as yet in Guix?
> 

I played around with a bunch of different options, and I wasn't able to
get the search-path-specification to pass the directories as strings. If
we change the file-type to 'string then it looks for strings, but it
really means it's looking for individual files or for directories, so
that's not the right change.

IMO the easiest way to work around it (from scsh, not from guix) would
be to use 'stringify' from (scheme utilities) in (scheme lib-dirs) (for
the syntactic sugar around symbol->string) to make all the items in the
search path into strings if they aren't already.

Actually I have a simple diff I'll send upstream that should take care
of it. If you could help test it that'd be great. I haven't been able to
create a scenario where I had more than one path in the SCSH_LIB_DIRS.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #1.2: scsh-nonstring-search-path.patch --]
[-- Type: text/plain, Size: 513 bytes --]

diff --git a/scheme/lib-dirs.scm b/scheme/lib-dirs.scm
index a1fc009..c630fb4 100644
--- a/scheme/lib-dirs.scm
+++ b/scheme/lib-dirs.scm
@@ -75,6 +75,7 @@
               (let ((val (read)))
                 (cond ((eof-object? val) '())
                       ((string? val) (cons val (recur)))
+                      ((symbol? val) (cons (symbol->string val) (recur)))
                       ((not val) (append default-lib-dirs (recur)))
                       (else 
                        (error 

[-- Attachment #1.3: guix-scsh-with-search-paths.diff --]
[-- Type: text/plain, Size: 2443 bytes --]

diff --git a/gnu/local.mk b/gnu/local.mk
index bda6df1280..56727769df 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1833,6 +1833,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/sbcl-clml-fix-types.patch		\
   %D%/packages/patches/sbcl-png-fix-sbcl-compatibility.patch	\
   %D%/packages/patches/scalapack-gcc-10-compilation.patch	\
+  %D%/packages/patches/scsh-nonstring-search-path.patch	\
   %D%/packages/patches/scheme48-tests.patch			\
   %D%/packages/patches/scons-test-environment.patch		\
   %D%/packages/patches/screen-hurd-path-max.patch		\
diff --git a/gnu/packages/patches/scsh-nonstring-search-path.patch b/gnu/packages/patches/scsh-nonstring-search-path.patch
new file mode 100644
index 0000000000..c79e6cc51e
--- /dev/null
+++ b/gnu/packages/patches/scsh-nonstring-search-path.patch
@@ -0,0 +1,12 @@
+diff --git a/scheme/lib-dirs.scm b/scheme/lib-dirs.scm
+index a1fc009..c630fb4 100644
+--- a/scheme/lib-dirs.scm
++++ b/scheme/lib-dirs.scm
+@@ -75,6 +75,7 @@
+               (let ((val (read)))
+                 (cond ((eof-object? val) '())
+                       ((string? val) (cons val (recur)))
++                      ((symbol? val) (cons (symbol->string val) (recur)))
+                       ((not val) (append default-lib-dirs (recur)))
+                       (else 
+                        (error 
diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm
index cc34f0a0a0..c5ceb3192b 100644
--- a/gnu/packages/shells.scm
+++ b/gnu/packages/shells.scm
@@ -613,7 +613,8 @@ (define-public scsh
          (file-name (string-append name "-" version "-checkout"))
          (sha256
           (base32
-           "1ghk08akiz7hff1pndi8rmgamgcrn2mv9asbss9l79d3c2iaav3q"))))
+           "1ghk08akiz7hff1pndi8rmgamgcrn2mv9asbss9l79d3c2iaav3q"))
+         (patches (search-patches "scsh-nonstring-search-path.patch"))))
       (build-system gnu-build-system)
       (arguments
        `(#:test-target "test"
@@ -632,6 +633,11 @@ (define-public scsh
        (list scheme48 scheme48-rx))
       (native-inputs
        (list autoconf automake))
+      (native-search-paths
+       (list (search-path-specification
+               (variable "SCSH_LIB_DIRS")
+               (separator " ")
+               (files '("share/scsh-0.7")))))
       (home-page "https://github.com/scheme/scsh")
       (synopsis "Unix shell embedded in Scheme")
       (description

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-11-14 23:25 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-31  7:18 SCSH libraries search path Tom Willemse
2022-11-06 10:13 ` Efraim Flashner
2022-11-14  0:49   ` Tom Willemse
2022-11-14 12:47     ` Efraim Flashner [this message]
2022-11-24  6:39       ` Tom Willemse
2023-02-16 15:42         ` Efraim Flashner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Y3I4/j5OPs3f1GQU@3900XT \
    --to=efraim@flashner.co.il \
    --cc=help-guix@gnu.org \
    --cc=tom@ryuslash.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).