summary refs log tree commit diff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2019-10-29 12:58:10 +0100
committerRicardo Wurmus <rekado@elephly.net>2019-10-29 15:14:22 +0100
commit7ff157c16cc74d367978170815313a37fc0fff93 (patch)
treea6d8f33f2ce5fa540276161c653fe8930289acdd
parent9b6410b96aed1f51a4eae9d123358a1e41f54374 (diff)
downloadguix-7ff157c16cc74d367978170815313a37fc0fff93.tar.gz
gnu: Add guile-ffi-fftw.
* gnu/packages/guile-xyz.scm (guile-ffi-fftw): New variable.
-rw-r--r--gnu/packages/guile-xyz.scm45
1 files changed, 45 insertions, 0 deletions
diff --git a/gnu/packages/guile-xyz.scm b/gnu/packages/guile-xyz.scm
index 3a55585251..d5c7325ba4 100644
--- a/gnu/packages/guile-xyz.scm
+++ b/gnu/packages/guile-xyz.scm
@@ -41,6 +41,7 @@
 (define-module (gnu packages guile-xyz)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages aspell)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages base)
@@ -2608,3 +2609,47 @@ bindings to Vigra C (a C wrapper to most of the Vigra functionality) and is
 enriched with pure Guile Scheme algorithms, all accessible through a nice,
 clean and easy to use high level API.")
     (license license:gpl3+)))
+
+(define-public guile-ffi-fftw
+  (let ((commit "95d7ffb55860f3163c5283ecec1ef43bc3d174dd")
+        (revision "1"))
+    (package
+      (name "guile-ffi-fftw")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/lloda/guile-ffi-fftw.git")
+                      (commit commit)))
+                (file-name (git-file-name "guile-ffi-fftw" version))
+                (sha256
+                 (base32
+                  "0v9vk9cr4x9gn36lihi9gfkxyiqak0i598v5li6qw8bg95004p49"))))
+      (build-system guile-build-system)
+      (arguments
+       `(#:source-directory "mod"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'prepare-build
+             (lambda* (#:key inputs #:allow-other-keys)
+               (substitute* "mod/ffi/fftw.scm"
+                 (("\\(getenv \"GUILE_FFI_FFTW_LIBFFTW3_PATH\"\\)")
+                  (format #f "\"~a/lib\"" (assoc-ref inputs "fftw"))))
+               #t))
+           (add-after 'build 'check
+             (lambda _
+               (invoke "guile" "-L" "mod"
+                       "-s" "test/test-ffi-fftw.scm"))))))
+      (inputs
+       `(("fftw" ,fftw)
+         ("guile" ,guile-2.2)))
+      (home-page "https://github.com/lloda/guile-ffi-fftw/")
+      (synopsis "Access FFTW through Guile's FFI")
+      (description "This is a minimal set of Guile FFI bindings for the FFTW
+library's ‘guru interface’.  It provides two functions: @code{fftw-dft! rank
+sign in out} and @code{fftw-dft rank sign in}.  These bindings being minimal,
+there is no support for computing & reusing plans, or split r/i transforms, or
+anything other than straight complex DFTs.")
+      ;; TODO: This might actually be LGPLv3+
+      ;; See https://github.com/lloda/guile-ffi-fftw/issues/1
+      (license license:gpl3+))))