summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuhail Singh <suhailsingh247@gmail.com>2025-04-22 10:51:53 -0400
committerChristopher Baines <mail@cbaines.net>2025-05-11 10:19:14 +0100
commit65dea0cde084dc364dbd0dbd51e589733951fed6 (patch)
treea136418763aa621269fb3c3ccb2034ec9ef4ed04
parent5137d4a96ce2d93e2db8bd6ec43df72793620b45 (diff)
gnu: Add emacs-ffi.
* gnu/packages/emacs-xyz.scm (emacs-ffi): New variable. Change-Id: I3379ff4728d3e3f45d5327978b5e284fcc0e664e Signed-off-by: Christopher Baines <mail@cbaines.net>
-rw-r--r--gnu/packages/emacs-xyz.scm53
1 files changed, 53 insertions, 0 deletions
diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
index 9d5e129d6f..c688ff34c4 100644
--- a/gnu/packages/emacs-xyz.scm
+++ b/gnu/packages/emacs-xyz.scm
@@ -237,6 +237,7 @@
#: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)
@@ -23284,6 +23285,58 @@ fetches weather information based on your location or on a given location from
@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 on 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")