[bug#78301] gnu: guile-mqtt: Patch extension path.

Message ID 679de4b93ba92b2b4d9f7272ca5531275f7ff446.1746631093.git.mail@pisemsky.site
State New
Headers
Series [bug#78301] gnu: guile-mqtt: Patch extension path. |

Commit Message

Evgeny Pisemsky May 7, 2025, 3:18 p.m. UTC
  * gnu/packages/guile-xyz.scm (guile-mqtt): Patch extension path.
[arguments]: Add 'patch-extension-path phase.

Change-Id: Ifbbd0adebcf82a36f674ab3fded3db5ba04b98b0
---
 gnu/packages/guile-xyz.scm | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)


base-commit: ec95c71c01144fcae1a3d079e0d0aec6087b9d2a
  

Comments

Z572 May 7, 2025, 3:29 p.m. UTC | #1
Evgeny Pisemsky <mail@pisemsky.site> writes:

> * gnu/packages/guile-xyz.scm (guile-mqtt): Patch extension path.
> [arguments]: Add 'patch-extension-path phase.
>
> Change-Id: Ifbbd0adebcf82a36f674ab3fded3db5ba04b98b0
> ---
>  gnu/packages/guile-xyz.scm | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
> index 28a94dc83a..7c6e3ade3e 100644
> --- a/gnu/packages/guile-xyz.scm
> +++ b/gnu/packages/guile-xyz.scm
> @@ -1658,7 +1658,16 @@ (define-public guile-mqtt
>      (build-system gnu-build-system)
>      (arguments
>       (list
> -      #:make-flags #~(list "GUILE_AUTO_COMPILE=0")))
> +      #:make-flags
> +      #~(list "GUILE_AUTO_COMPILE=0")
> +      #:phases
> +      #~(modify-phases %standard-phases
> +          (add-after 'unpack 'patch-extension-path
> +            (lambda* (#:key inputs #:allow-other-keys)
> +              (substitute* "module/ffi/mosquitto.scm"
> +                (("list #f \"libmosquitto\"")
> +                 (format #f "list #f \"~a/lib/libmosquitto\""
> +                         (assoc-ref inputs "mosquitto")))))))))

please use string-append. else if no "mosquitto" in inputs, The modified
result is "list #f \"#f/lib/libmosquitto\""

>      (native-inputs (list guile-3.0 pkg-config))
>      (inputs (list mosquitto))
>      (home-page "https://github.com/mdjurfeldt/guile-mqtt")
>
> base-commit: ec95c71c01144fcae1a3d079e0d0aec6087b9d2a
  
Z572 May 7, 2025, 4:51 p.m. UTC | #2
Evgeny Pisemsky <mail@pisemsky.site> writes:

> Z572 <z572@z572.online> writes:
>
>> else if no "mosquitto" in inputs
>
> I don't get it.
>
> It is in inputs.

for example, If I use the following codes
```
(define-public mosquitto-with-something
  (package
    (inherit mosquitto)
    (name "mosquitto-with-something")
    ...
    (license (list license:epl1.0 license:edl1.0))))

(define-public guile-mqtt-with-something
  (package (inherit guile-mqtt)
           (name "guile-mqtt-with-something")
           ...
           (inputs (list mosquitto-with-v))))
```


guix build guile-mqtt-with-something will success, but if you see
share/guile/site/3.0/ffi/mosquitto.scm,

```
(define (foreign-pointer-search name)
  (let loop ((libs (list #f "#f/lib/libmosquitto")))
    (cond
      ((null? libs) (error "no library for ~s" name))
      ((false-if-exception (foreign-library-pointer (car libs) name)))
      (else (loop (cdr libs))))))
```

This will cause problems. It is best to report an error during
build. A better approach is to use search-input-file. Instead of relying
on names, look up /lib/libmosquitto.so.
  

Patch

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 28a94dc83a..7c6e3ade3e 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -1658,7 +1658,16 @@  (define-public guile-mqtt
     (build-system gnu-build-system)
     (arguments
      (list
-      #:make-flags #~(list "GUILE_AUTO_COMPILE=0")))
+      #:make-flags
+      #~(list "GUILE_AUTO_COMPILE=0")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'patch-extension-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "module/ffi/mosquitto.scm"
+                (("list #f \"libmosquitto\"")
+                 (format #f "list #f \"~a/lib/libmosquitto\""
+                         (assoc-ref inputs "mosquitto")))))))))
     (native-inputs (list guile-3.0 pkg-config))
     (inputs (list mosquitto))
     (home-page "https://github.com/mdjurfeldt/guile-mqtt")