Subject: [PATCH] gnu: Add guile-gsl.
From: Artyom Bologov <[email-masked]>
To: Guix patches <[email-masked]>
Date: Wed, 28 Feb 2024 02:56:12 +0400
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi y'all,

This is both a patch submission and a call for help—I'm far out of my
waters with this package and am not sure of the proper Guix-y way to
build it.

So the build sequence for Guile GSL is:
(1) Compile a bundled libguilegslblas.so with a C compiler, using the GSL
    libraries from package inputs.
(2) Put proper paths to the GSL libraries and libguilegslblas into the
    Scheme files.
(3) Compile Scheme files as per guile-build-system.

I've got (2) and (3) more or less working. The problem is: which build
system should I use and how do I synthesize GNU build system (makefile,
libguilegslblas.so, (1)) and Guile one?

You can find my draft (doesn't build and is not usable in general) patch
attached below. Any help appreciated!

From 5bd38a674fff008c189d1c39495d771354c945fb Mon Sep 17 00:00:00 2001
From: Artyom Bologov <[email-masked]>
Date: Wed, 28 Feb 2024 02:54:31 +0400
Subject: [PATCH] gnu: Add guile-gsl.

* gnu/packages/guile-xyz.scm (guile-gsl): New variable.
---
 gnu/packages/guile-xyz.scm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index b34472d5bd..6b9492c4b7 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -4474,6 +4474,40 @@ (define-public guile-ffi-cblas
 function: raw, typed, and functional.")
       (license license:lgpl3+))))
 
+(define-public guile-gsl
+  (let ((commit "8540bcb6afa9be37153852255608d26d5a4df9dd")
+        (revision "0"))
+    (package
+      (name "guile-gsl")
+      (version "0.0.1")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/aartaka/guile-gsl")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "00dy33ibvfhzs5xp65g4g8d02wy4fiamjbp3pg87cghg41q4lwkr"))))
+      (build-system guile-build-system)
+      (arguments
+       '(#:source-directory "modules"
+         #:phases
+         #~(modify-phases %standard-phases
+             (add-before 'build 'substitute-gsl-so
+               (lambda _
+                 (let ((gsl (string-append #$(this-package-input "lmdb")
+                                           "/lib/libgsl.so")))
+                   (substitute* "modules/gsl/core.scm"
+                     (("libgsl.so") gsl))))))))
+      (native-inputs (list guile-3.0))
+      (inputs (list guile-3.0 gsl))
+      (home-page "https://github.com/aartaka/guile-gsl")
+      (synopsis "Bindings for GNU Scientific library in Guile.")
+      (description "This package provides Guile Scheme wrapper for libgsl.so.
+Only vector, matrix, and BLAS operations are covered for now.")
+      (license license:gpl3+))))
+
 (define-public guile-ffi-fftw
   (let ((commit "294ad9e7491dcb40026d2fec9be2af05263be1c0")
         (revision "2"))
-- 
2.41.0

Thanks,
--
Artyom Bologov.