[bug#77990,v2] 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
Comments
>mar. 22 avril 2025 at 10:51, "Suhail Singh" <suhailsingh247@gmail.com> wrote:
> * gnu/packages/emacs-xyz.scm (emacs-ffi): New variable.
>
> Change-Id: I3379ff4728d3e3f45d5327978b5e284fcc0e664e
> ---
> gnu/packages/emacs-xyz.scm | 53 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 53 insertions(+)
>
> diff --git a/gnu/packages/emacs-xyz.scm b/gnu/packages/emacs-xyz.scm
> index 08bd88fd08..e6253089e8 100644
> --- a/gnu/packages/emacs-xyz.scm
> +++ b/gnu/packages/emacs-xyz.scm
> @@ -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"))))
I have a doubt about where do we put .so files.
- lib
- lib/package
- lib/emacs (see emacs-jinx)
Other than this, LFTM.
C.
Cayetano Santos <csantosb@inventati.org> writes:
>> + ;; Install the shared object file into /lib.
>> + (install-file "build/lib/ffi-module.so"
>> + (string-append #$output "/lib"))))
>
> I have a doubt about where do we put .so files.
>
> - lib
> - lib/package
> - lib/emacs (see emacs-jinx)
>
> Other than this, LFTM.
IIUC the standard place for shared libraries is in #$output/lib. I
don't know of any reason to deviate from that in this case. To the
extent it matters, at least one other dynamic module (emacs-sqlite3-api)
also uses that convention.
I'm no authority, but it seems that Emacs dynamic modules are simply
less consistent about storing libraries in the standard location, rather
than there being a principled reason against using the standard
convention.
Thanks for the review.
@@ -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 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")