diff mbox series

[bug#60286,PATCHES] Add guile's implementation for scheme-lsp-server

Message ID 890f1480abf9e421aa3301a0e857ee2f@posteo.de
State New
Headers show
Series [bug#60286,PATCHES] Add guile's implementation for scheme-lsp-server | expand

Commit Message

Ricardo G. Herdt June 21, 2023, 7:27 p.m. UTC
* gnu/packages/guile-xyz.scm: add guile-lsp-server;
   (guile-scheme-json-rpc): update to 0.4.0, change dependencies

Original package author Giacomo Leidi. Adapted to use 
guile-scheme-json-rpc.
---
  gnu/packages/guile-xyz.scm | 97 +++++++++++++++++++++++++++++++++++---
  1 file changed, 91 insertions(+), 6 deletions(-)

        (description
         "This library implements parts of the
  @uref{https://www.jsonrpc.org/specification,JSON-RPC specification}, 
allowing
@@ -1085,6 +1089,87 @@ (define-public guile-scheme-json-rpc
        (home-page "https://codeberg.org/rgherdt/scheme-json-rpc/")
        (license license:expat))))

+(define-public guile-lsp-server
+  (package
+    (name "guile-lsp-server")
+    (version "0.4.0")
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference
+            (url "https://codeberg.org/rgherdt/scheme-lsp-server.git")
+            (commit version)))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "04fc76pnl8mrwrjw49xhzs4r0dx2vh4gy2y151p33hahylf5z1xs"))))
+    (build-system gnu-build-system)
+    (arguments
+     (list #:modules `((ice-9 match)
+                       (ice-9 ftw)
+                       ,@%gnu-build-system-modules)
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'move-to-guile-directory
+                 (lambda _
+                   (chdir "./guile")))
+               (add-after 'install 'wrap-entrypoint
+                 (lambda _
+                   (let* ((bin (string-append #$output "/bin"))
+                          (site (string-append #$output
+                                               "/share/guile/site"))
+                          (deps (list #$guile-scheme-json-rpc)))
+                     (match (scandir site)
+                       (("." ".." version)
+                        (let ((modules (string-append site "/"
+                                                      version))
+                              (compiled-modules (string-append #$output
+                                                 "/lib/guile/"
+                                                 version
+                                                 "/site-ccache")))
+                          (wrap-program (string-append bin
+                                         "/guile-lsp-server")
+                                        `("GUILE_LOAD_PATH" ":"
+                                          prefix
+                                          (,modules
+                                           ,@(map (lambda (dep)
+                                                    (string-append
+                                                     dep
+                                                     
"/share/guile/site/"
+                                                     version))
+                                                  deps)))
+                                        `("GUILE_LOAD_COMPILED_PATH"
+                                          ":" prefix
+                                          (,compiled-modules
+                                           ,@(map (lambda (dep)
+                                                    (string-append
+                                                     dep
+                                                     "/lib/guile/"
+                                                     version
+                                                     "/site-ccache"))
+                                              deps))))
+                          #t)))))))))
+    (native-inputs (list pkg-config))
+    (inputs
+     ;; Depend on the latest Guile to avoid bytecode compatibility 
issues when
+     ;; using modules built against the latest version.
+     (list bash-minimal
+           guile-3.0-latest))
+    (propagated-inputs (list guile-irregex
+                             guile-scheme-json-rpc
+                             guile-srfi-145
+                             guile-srfi-180))
+    (synopsis "LSP (Language Server Protocol) server for Scheme")
+    (description
+     "@code{guile-lsp-server} is an implementation for Guile of the LSP
+specification.  This software aims to support several Scheme 
implementations.
+To achieve this, the code is designed to contain as much logic as 
possible in
+R7RS Scheme, separating implementation-specific code in different 
modules.
+
+This package delivers Guile's implementation for 
@code{scheme-lsp-server}.")
+    (home-page "https://codeberg.org/rgherdt/scheme-lsp-server")
+    (license license:expat)))
+
  (define-public guile-squee
    (let ((commit "fab9d9590792f3ededd4abd8cfa6be5e56659678")
          (revision "4"))

base-commit: 392f9db97687bfb6195e65a28e1710f22b6cb972

Comments

Andrew Tropin Aug. 7, 2023, 9:44 a.m. UTC | #1
On 2023-06-21 19:27, Ricardo G. Herdt wrote:

Hi Ricardo, thank you very much for the patches and working on
guile-lsp-server.

> * gnu/packages/guile-xyz.scm: add guile-lsp-server;
>    (guile-scheme-json-rpc): update to 0.4.0, change dependencies
>
> Original package author Giacomo Leidi. Adapted to use 
> guile-scheme-json-rpc.
> ---
>   gnu/packages/guile-xyz.scm | 97 +++++++++++++++++++++++++++++++++++---
>   1 file changed, 91 insertions(+), 6 deletions(-)
>
> diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
> index db7be432cc..1195e0e328 100644
> --- a/gnu/packages/guile-xyz.scm
> +++ b/gnu/packages/guile-xyz.scm
> @@ -1054,9 +1054,9 @@ (define-public guile2.2-sjson
>       (inputs (list guile-2.2))))
>
>   (define-public guile-scheme-json-rpc
> -  (let ((commit "45ae6890f6619286f5679f88c094c88127b54c4a")
> +  (let ((commit "50acef7b824e2d23140e48242020f5fdc85cc67d")

For tagged release there is no need for commit and revision, I'll remove
them and apply the part of the patch related to guile-scheme-json-rpc
version update as separate commit.

>           (revision "0")
> -        (version "0.2.11"))
> +        (version "0.4.0"))
>       (package
>         (name "guile-scheme-json-rpc")
>         (version (git-version version revision commit))
> @@ -1068,16 +1068,20 @@ (define-public guile-scheme-json-rpc
>                   (file-name (git-file-name name version))
>                   (sha256
>                    (base32
> -                  
> "0w4m8xx8yyj0rv0q57mjr8ja87l7yikscj33i3ck26wg7230ppa5"))))
> +                  
> "0jsampz2ahs18z6yh9b5l3lkj8ycnavs0vg9sjngdj3w3zvrdcvm"))))
>         (build-system gnu-build-system)
>         (arguments
>          `(#:phases (modify-phases %standard-phases
>                       (add-after 'unpack 'change-to-guile-dir
>                         (lambda _
>                           (chdir "guile"))))))
> -      (inputs (list guile-3.0 guile-json-3))
> -      (native-inputs (list pkg-config))
> -      (synopsis "Library providing JSON-RPC capability in Scheme")
> +      (inputs (list guile-3.0 guile-srfi-145 guile-srfi-180))
> +      (native-inputs (list autoconf
> +                           automake
> +                           pkg-config
> +                           texinfo
> +                           guile-3.0))

auto tools is already provided by gnu-build-system, no need to provide
them one more time.  I don't see any texi docs, so probably texinfo is
not needed.  Also guile-3.0 in native (build host side) inputs also not
needed.  Removed.

> +      (synopsis "Library providing JSON-RPC capability for Guile 
> Scheme")
>         (description
>          "This library implements parts of the
>   @uref{https://www.jsonrpc.org/specification,JSON-RPC specification}, 
> allowing
> @@ -1085,6 +1089,87 @@ (define-public guile-scheme-json-rpc
>         (home-page "https://codeberg.org/rgherdt/scheme-json-rpc/")
>         (license license:expat))))
>
> +(define-public guile-lsp-server
> +  (package
> +    (name "guile-lsp-server")
> +    (version "0.4.0")
> +    (source
> +     (origin
> +      (method git-fetch)
> +      (uri (git-reference
> +            (url "https://codeberg.org/rgherdt/scheme-lsp-server.git")
> +            (commit version)))
> +      (file-name (git-file-name name version))
> +      (sha256
> +       (base32
> +        "04fc76pnl8mrwrjw49xhzs4r0dx2vh4gy2y151p33hahylf5z1xs"))))
> +    (build-system gnu-build-system)
> +    (arguments
> +     (list #:modules `((ice-9 match)
> +                       (ice-9 ftw)
> +                       ,@%gnu-build-system-modules)
> +           #:phases
> +           #~(modify-phases %standard-phases
> +               (add-after 'unpack 'move-to-guile-directory
> +                 (lambda _
> +                   (chdir "./guile")))
> +               (add-after 'install 'wrap-entrypoint
> +                 (lambda _
> +                   (let* ((bin (string-append #$output "/bin"))
> +                          (site (string-append #$output
> +                                               "/share/guile/site"))
> +                          (deps (list #$guile-scheme-json-rpc)))

It's better to use (assoc-ref inputs ...) here, because
#$guile-scheme-json-rpc will hardcode the exact package and if someone
will try to inherit from guile-lsp-server and override
guile-scheme-json-rpc input, it won't make a desired effect and
hardcoded version of guile-scheme-json-rpc will be used.

Also, guile-lsp-server executable doesn't run, it's very likely that
other required dependencies are missing here in the deps variable.

> +                     (match (scandir site)
> +                       (("." ".." version)
> +                        (let ((modules (string-append site "/"
> +                                                      version))
> +                              (compiled-modules (string-append #$output
> +                                                 "/lib/guile/"
> +                                                 version
> +                                                 "/site-ccache")))
> +                          (wrap-program (string-append bin
> +                                         "/guile-lsp-server")
> +                                        `("GUILE_LOAD_PATH" ":"
> +                                          prefix
> +                                          (,modules
> +                                           ,@(map (lambda (dep)
> +                                                    (string-append
> +                                                     dep
> +                                                     
> "/share/guile/site/"
> +                                                     version))
> +                                                  deps)))
> +                                        `("GUILE_LOAD_COMPILED_PATH"
> +                                          ":" prefix
> +                                          (,compiled-modules
> +                                           ,@(map (lambda (dep)
> +                                                    (string-append
> +                                                     dep
> +                                                     "/lib/guile/"
> +                                                     version
> +                                                     "/site-ccache"))
> +                                              deps))))
> +                          #t)))))))))
> +    (native-inputs (list pkg-config))
> +    (inputs
> +     ;; Depend on the latest Guile to avoid bytecode compatibility 
> issues when
> +     ;; using modules built against the latest version.
> +     (list bash-minimal
> +           guile-3.0-latest))
> +    (propagated-inputs (list guile-irregex
> +                             guile-scheme-json-rpc
> +                             guile-srfi-145
> +                             guile-srfi-180))

For standalone programs like guile-lsp-server, where we manually
construct GUILE_LOAD_PATH it's not needed to propagate dependencies in
the profile, where package is installed.  It should be just inputs.

> +    (synopsis "LSP (Language Server Protocol) server for Scheme")
> +    (description
> +     "@code{guile-lsp-server} is an implementation for Guile of the LSP
> +specification.  This software aims to support several Scheme 
> implementations.
> +To achieve this, the code is designed to contain as much logic as 
> possible in
> +R7RS Scheme, separating implementation-specific code in different 
> modules.
> +
> +This package delivers Guile's implementation for 
> @code{scheme-lsp-server}.")
> +    (home-page "https://codeberg.org/rgherdt/scheme-lsp-server")
> +    (license license:expat)))
> +
>   (define-public guile-squee
>     (let ((commit "fab9d9590792f3ededd4abd8cfa6be5e56659678")
>           (revision "4"))
>
> base-commit: 392f9db97687bfb6195e65a28e1710f22b6cb972

Applied first part of the patch, pushed as
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=56667ee55c

Please update the guile-lsp-server package definition to make it work
(right now package builds, but executable fails to run).

P.S. Thanks to Giacomo for spinning up this thread!
Ricardo G. Herdt Sept. 17, 2023, 8:29 a.m. UTC | #2
Hi Andrew,

Thanks for the feedback. Could you please show the error you get when 
running guile-lsp-server? I'm using Guix on top of Debian, and running 
`guile-lsp-server` with the prefixes set works:

GUILE_LOAD_PATH=...:${HOME}/.guix-profile/share/guile/site/3.0/ 
GUILE_LOAD_COMPILED_PATH=...:${HOME}/.guix-profile/lib/guile/3.0/site-ccache 
./guile-lsp-server --version

Regards,

Ricardo


Am 07.08.2023 11:44 schrieb Andrew Tropin:
> On 2023-06-21 19:27, Ricardo G. Herdt wrote:
> 
> Hi Ricardo, thank you very much for the patches and working on
> guile-lsp-server.
> 
>> * gnu/packages/guile-xyz.scm: add guile-lsp-server;
>>    (guile-scheme-json-rpc): update to 0.4.0, change dependencies
>> 
>> Original package author Giacomo Leidi. Adapted to use
>> guile-scheme-json-rpc.
>> ---
>>   gnu/packages/guile-xyz.scm | 97 
>> +++++++++++++++++++++++++++++++++++---
>>   1 file changed, 91 insertions(+), 6 deletions(-)
>> 
>> diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
>> index db7be432cc..1195e0e328 100644
>> --- a/gnu/packages/guile-xyz.scm
>> +++ b/gnu/packages/guile-xyz.scm
>> @@ -1054,9 +1054,9 @@ (define-public guile2.2-sjson
>>       (inputs (list guile-2.2))))
>> 
>>   (define-public guile-scheme-json-rpc
>> -  (let ((commit "45ae6890f6619286f5679f88c094c88127b54c4a")
>> +  (let ((commit "50acef7b824e2d23140e48242020f5fdc85cc67d")
> 
> For tagged release there is no need for commit and revision, I'll 
> remove
> them and apply the part of the patch related to guile-scheme-json-rpc
> version update as separate commit.
> 
>>           (revision "0")
>> -        (version "0.2.11"))
>> +        (version "0.4.0"))
>>       (package
>>         (name "guile-scheme-json-rpc")
>>         (version (git-version version revision commit))
>> @@ -1068,16 +1068,20 @@ (define-public guile-scheme-json-rpc
>>                   (file-name (git-file-name name version))
>>                   (sha256
>>                    (base32
>> -
>> "0w4m8xx8yyj0rv0q57mjr8ja87l7yikscj33i3ck26wg7230ppa5"))))
>> +
>> "0jsampz2ahs18z6yh9b5l3lkj8ycnavs0vg9sjngdj3w3zvrdcvm"))))
>>         (build-system gnu-build-system)
>>         (arguments
>>          `(#:phases (modify-phases %standard-phases
>>                       (add-after 'unpack 'change-to-guile-dir
>>                         (lambda _
>>                           (chdir "guile"))))))
>> -      (inputs (list guile-3.0 guile-json-3))
>> -      (native-inputs (list pkg-config))
>> -      (synopsis "Library providing JSON-RPC capability in Scheme")
>> +      (inputs (list guile-3.0 guile-srfi-145 guile-srfi-180))
>> +      (native-inputs (list autoconf
>> +                           automake
>> +                           pkg-config
>> +                           texinfo
>> +                           guile-3.0))
> 
> auto tools is already provided by gnu-build-system, no need to provide
> them one more time.  I don't see any texi docs, so probably texinfo is
> not needed.  Also guile-3.0 in native (build host side) inputs also not
> needed.  Removed.
> 
>> +      (synopsis "Library providing JSON-RPC capability for Guile
>> Scheme")
>>         (description
>>          "This library implements parts of the
>>   @uref{https://www.jsonrpc.org/specification,JSON-RPC specification},
>> allowing
>> @@ -1085,6 +1089,87 @@ (define-public guile-scheme-json-rpc
>>         (home-page "https://codeberg.org/rgherdt/scheme-json-rpc/")
>>         (license license:expat))))
>> 
>> +(define-public guile-lsp-server
>> +  (package
>> +    (name "guile-lsp-server")
>> +    (version "0.4.0")
>> +    (source
>> +     (origin
>> +      (method git-fetch)
>> +      (uri (git-reference
>> +            (url 
>> "https://codeberg.org/rgherdt/scheme-lsp-server.git")
>> +            (commit version)))
>> +      (file-name (git-file-name name version))
>> +      (sha256
>> +       (base32
>> +        "04fc76pnl8mrwrjw49xhzs4r0dx2vh4gy2y151p33hahylf5z1xs"))))
>> +    (build-system gnu-build-system)
>> +    (arguments
>> +     (list #:modules `((ice-9 match)
>> +                       (ice-9 ftw)
>> +                       ,@%gnu-build-system-modules)
>> +           #:phases
>> +           #~(modify-phases %standard-phases
>> +               (add-after 'unpack 'move-to-guile-directory
>> +                 (lambda _
>> +                   (chdir "./guile")))
>> +               (add-after 'install 'wrap-entrypoint
>> +                 (lambda _
>> +                   (let* ((bin (string-append #$output "/bin"))
>> +                          (site (string-append #$output
>> +                                               "/share/guile/site"))
>> +                          (deps (list #$guile-scheme-json-rpc)))
> 
> It's better to use (assoc-ref inputs ...) here, because
> #$guile-scheme-json-rpc will hardcode the exact package and if someone
> will try to inherit from guile-lsp-server and override
> guile-scheme-json-rpc input, it won't make a desired effect and
> hardcoded version of guile-scheme-json-rpc will be used.
> 
> Also, guile-lsp-server executable doesn't run, it's very likely that
> other required dependencies are missing here in the deps variable.
> 
>> +                     (match (scandir site)
>> +                       (("." ".." version)
>> +                        (let ((modules (string-append site "/"
>> +                                                      version))
>> +                              (compiled-modules (string-append 
>> #$output
>> +                                                 "/lib/guile/"
>> +                                                 version
>> +                                                 "/site-ccache")))
>> +                          (wrap-program (string-append bin
>> +                                         "/guile-lsp-server")
>> +                                        `("GUILE_LOAD_PATH" ":"
>> +                                          prefix
>> +                                          (,modules
>> +                                           ,@(map (lambda (dep)
>> +                                                    (string-append
>> +                                                     dep
>> +
>> "/share/guile/site/"
>> +                                                     version))
>> +                                                  deps)))
>> +                                        `("GUILE_LOAD_COMPILED_PATH"
>> +                                          ":" prefix
>> +                                          (,compiled-modules
>> +                                           ,@(map (lambda (dep)
>> +                                                    (string-append
>> +                                                     dep
>> +                                                     "/lib/guile/"
>> +                                                     version
>> +                                                     "/site-ccache"))
>> +                                              deps))))
>> +                          #t)))))))))
>> +    (native-inputs (list pkg-config))
>> +    (inputs
>> +     ;; Depend on the latest Guile to avoid bytecode compatibility
>> issues when
>> +     ;; using modules built against the latest version.
>> +     (list bash-minimal
>> +           guile-3.0-latest))
>> +    (propagated-inputs (list guile-irregex
>> +                             guile-scheme-json-rpc
>> +                             guile-srfi-145
>> +                             guile-srfi-180))
> 
> For standalone programs like guile-lsp-server, where we manually
> construct GUILE_LOAD_PATH it's not needed to propagate dependencies in
> the profile, where package is installed.  It should be just inputs.
> 
>> +    (synopsis "LSP (Language Server Protocol) server for Scheme")
>> +    (description
>> +     "@code{guile-lsp-server} is an implementation for Guile of the 
>> LSP
>> +specification.  This software aims to support several Scheme
>> implementations.
>> +To achieve this, the code is designed to contain as much logic as
>> possible in
>> +R7RS Scheme, separating implementation-specific code in different
>> modules.
>> +
>> +This package delivers Guile's implementation for
>> @code{scheme-lsp-server}.")
>> +    (home-page "https://codeberg.org/rgherdt/scheme-lsp-server")
>> +    (license license:expat)))
>> +
>>   (define-public guile-squee
>>     (let ((commit "fab9d9590792f3ededd4abd8cfa6be5e56659678")
>>           (revision "4"))
>> 
>> base-commit: 392f9db97687bfb6195e65a28e1710f22b6cb972
> 
> Applied first part of the patch, pushed as
> https://git.savannah.gnu.org/cgit/guix.git/commit/?id=56667ee55c
> 
> Please update the guile-lsp-server package definition to make it work
> (right now package builds, but executable fails to run).
> 
> P.S. Thanks to Giacomo for spinning up this thread!
diff mbox series

Patch

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index db7be432cc..1195e0e328 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -1054,9 +1054,9 @@  (define-public guile2.2-sjson
      (inputs (list guile-2.2))))

  (define-public guile-scheme-json-rpc
-  (let ((commit "45ae6890f6619286f5679f88c094c88127b54c4a")
+  (let ((commit "50acef7b824e2d23140e48242020f5fdc85cc67d")
          (revision "0")
-        (version "0.2.11"))
+        (version "0.4.0"))
      (package
        (name "guile-scheme-json-rpc")
        (version (git-version version revision commit))
@@ -1068,16 +1068,20 @@  (define-public guile-scheme-json-rpc
                  (file-name (git-file-name name version))
                  (sha256
                   (base32
-                  
"0w4m8xx8yyj0rv0q57mjr8ja87l7yikscj33i3ck26wg7230ppa5"))))
+                  
"0jsampz2ahs18z6yh9b5l3lkj8ycnavs0vg9sjngdj3w3zvrdcvm"))))
        (build-system gnu-build-system)
        (arguments
         `(#:phases (modify-phases %standard-phases
                      (add-after 'unpack 'change-to-guile-dir
                        (lambda _
                          (chdir "guile"))))))
-      (inputs (list guile-3.0 guile-json-3))
-      (native-inputs (list pkg-config))
-      (synopsis "Library providing JSON-RPC capability in Scheme")
+      (inputs (list guile-3.0 guile-srfi-145 guile-srfi-180))
+      (native-inputs (list autoconf
+                           automake
+                           pkg-config
+                           texinfo
+                           guile-3.0))
+      (synopsis "Library providing JSON-RPC capability for Guile 
Scheme")