[bug#77990] gnu: Add emacs-ffi.
Commit Message
* gnu/packages/emacs-xyz.scm (emacs-ffi): New variable.
Change-Id: I3379ff4728d3e3f45d5327978b5e284fcc0e664e
---
gnu/packages/emacs-xyz.scm | 53 ++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
base-commit: c8194a529724721e2b96e0fe259cd92b63ff57aa
@@ -236,6 +236,7 @@ (define-module (gnu packages emacs-xyz)
#:use-module (gnu packages llvm)
#:use-module (gnu packages image)
#:use-module (gnu packages image-viewers)
+ #:use-module (gnu packages libffi)
#:use-module (gnu packages linux)
#:use-module (gnu packages libevent)
#:use-module (gnu packages lisp)
@@ -23092,6 +23093,58 @@ (define-public emacs-display-wttr
@uref{https://wttr.in} and then displays it on the mode line.")
(license license:gpl3+)))
+(define-public emacs-ffi
+ (package
+ (name "emacs-ffi")
+ (version "0.2.1")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/emacs-ffi/emacs-ffi")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "05crpgscpbzkg4k0ylbfjz2wyw2r8lki8q9w2kmdpljsqrpdrwl0"))))
+ (build-system emacs-build-system)
+ (arguments
+ (list
+ #:tests? (not (%current-target-system))
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'patch-module-load
+ (lambda _
+ (make-file-writable "src/ffi.el")
+ (emacs-substitute-sexps "src/ffi.el"
+ ("(require 'ffi-module nil t)"
+ `(module-load
+ ,(string-append #$output "/lib/ffi-module.so"))))))
+ (add-before 'check 'build-emacs-module
+ (lambda _
+ ;; Compile the shared object file.
+ (invoke "make"
+ #$(string-append "CC="
+ (cc-for-target)))
+ ;; Copy the build artifacts to root and let the install phase do
+ ;; its thing
+ (copy-recursively "build/lib" ".")
+ ;; Install the shared object file into /lib.
+ (install-file "build/lib/ffi-module.so"
+ (string-append #$output "/lib"))))
+ (add-before 'install 'installinfo
+ (lambda _
+ (install-file "build/doc/emacs-ffi.info"
+ (string-append #$output "/share/info")))))))
+ (inputs (list emacs-compat libltdl libffi))
+ (native-inputs (list texinfo))
+ (home-page "https://emacs-ffi.github.io/emacs-ffi/")
+ (synopsis "FFI for Emacs based in libffi")
+ (description
+ "This package provides an FFI for Emacs. It is based on
+libffi and relies on the dynamic module support in order to be loaded into
+Emacs. It is relatively full-featured, but for the time being low-level.")
+ (license license:gpl3+)))
+
(define-public emacs-free-keys
(package
(name "emacs-free-keys")