Subject: [bug#73839] [PATCH 1/5] lisp-xyz: + sbcl-posix-shm

From: Grigory Shepelev <[email-masked]>
Date: Wed, 16 Oct 2024 15:02:42 +0300

diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 16b1b8d873..7fb3141aaa 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -30226,6 +30226,43 @@ (define-public sbcl-trivial-raw-io
 Lisp.")
       (license license:bsd-2))))

+(define-public sbcl-posix-shm
+  (let ((commit "9443da23bcda0a2bd727aed675f92ee7d3c51802")
+        (revision "0.0.7")
+        (hash "0ah7xh7dxvdk58slic60gx7k56idjw5x30q5ifg90hxfhd32qz6l"))
+    (package
+      (name "sbcl-posix-shm")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.sr.ht/~shunter/posix-shm")
+               (commit commit)))
+         (file-name (git-file-name "sbcl-posix-shm" version))
+         (sha256 (base32 hash))))
+      (build-system asdf-build-system/sbcl)
+      (arguments (list #:asd-systems ''("posix-shm" "posix-shm/ffi" "posix-shm/test")))
+      (inputs (list sbcl-cffi sbcl-alexandria sbcl-trivial-features
+                    ;;↓ for tests
+                    sbcl-osicat sbcl-parachute))
+      (home-page "https://git.sr.ht/~shunter/posix-shm")
+      (synopsis "Common Lisp bindings and wrapper for the POSIX shared memory API")
+      (description "This library provides two strata to access the POSIX shm API:
+@itemize
+@item The package @code{posix-shm/ffi}, a collection of slim bindings to the POSIX API
+@item The package @code{posix-shm}, a lispy wrapper around the FFI that integrates more closely to the features of Common Lisp, and provides a handful of utilities and macros
+@end itemize
+
+Features include:
+@itemize
+@item Open, close, create, resize, change ownership of, change permissions of, and memory map to shared memory objects.
+@item @code{open-shm} appears more like open from the standard library.
+@item @code{open-shm*}, for creating anonymous shm objects.
+@item @code{with-open-shm}, @code{with-mmap} and similar @code{with-} macros for safely accessing resources with dynamic extent.
+@end itemize")
+      (license license:bsd-3))))
+
 (define-public cl-trivial-raw-io
   (sbcl-package->cl-source-package sbcl-trivial-raw-io))

--
2.46.0

>From fe238bc3f5ce2342e58e1b98ee829cf970102b94 Mon Sep 17 00:00:00 2001
From: Grigory Shepelev <[email-masked]>
Date: Fri, 11 Oct 2024 11:20:39 +0300
Subject: [PATCH 2/5] lisp-xyz: + sbcl-xkb (from @malcolmstill)

---
 gnu/packages/lisp-xyz.scm | 44 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 7fb3141aaa..933e4d48eb 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -31864,6 +31864,50 @@ (define-public cl-xkbcommon
 (define-public ecl-xkbcommon
   (sbcl-package->ecl-package sbcl-xkbcommon))

+(define-public sbcl-xkb
+  (let ((commit "e69c0e85e59fd8271efa2e9659cfffa9b59d1ece")
+        (revision "0")
+        (hash "01k4hf316xr2h149vf7sh45rrdkfppqnzakzn91i7lw46dwl57wh"))
+    (package
+      (name "sbcl-xkb")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/malcolmstill/cl-xkb")
+               (commit commit)))
+         (file-name (git-file-name "cl-xkb" version))
+         (sha256 (base32 hash))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list pkg-config))
+      (arguments
+       (list
+        #:asd-systems ''("cl-xkb")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'add-xkbcommon
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "cl-xkb.lisp"
+                  (("/usr/lib64/libxkbcommon.so.0")
+                   (search-input-file inputs "/lib/libxkbcommon.so"))))))))
+      (inputs (list libxkbcommon sbcl-cffi))
+      (home-page "https://github.com/malcolmstill/cl-xkb")
+      (synopsis "@code{cl-xkb} is a Common Lisp wrapper for @code{libxkbcommon}")
+      (description "cl-xkb started development to support @url{https://github.com/malcolmstill/ulubis, ulubis}.
+The library currently supports these xkb modules:
+@itemize
+@item Keysyms
+@item Library Context
+@item Include Paths
+@item Logging Handling
+@item Keymap Creation
+@item Keymap Components
+@item Keyboard State
+@item Compose and dead-keys support
+@end itemize")
+      (license license:bsd-3))))
+
 (define-public sbcl-xml-emitter
   (package
     (name "sbcl-xml-emitter")
--
2.46.0

>From 697fe999051f1a51c11170f4a8b44367e418213c Mon Sep 17 00:00:00 2001
From: Grigory Shepelev <[email-masked]>
Date: Fri, 11 Oct 2024 12:16:50 +0300
Subject: [PATCH 3/5] lisp-xyz: + sbcl-cl-pango

---
 gnu/packages/lisp-xyz.scm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index 933e4d48eb..c7274e1f43 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -4496,6 +4496,40 @@ (define-public cl-cairo2
 (define-public ecl-cl-cairo2
   (sbcl-package->ecl-package sbcl-cl-cairo2))

+(define-public sbcl-cl-pango
+  (let ((commit   "ee4904d19ce22d00eb2fe17a4fe42e5df8ac8701")
+        (revision "1")
+        (hash     "0zkn4yn8nkkjr0x1vcy856cvbmnyhdidqz0in8xvd2i93jvw5w0i"))
+    (package
+      (name "sbcl-cl-pango")
+      (version revision)
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/BradWBeer/cl-pango")
+               (commit commit)))
+         (file-name (git-file-name "cl-pango" version))
+         (sha256 (base32 hash))))
+      (build-system asdf-build-system/sbcl)
+      (arguments
+       (list
+        #:asd-systems ''("cl-pango")
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'fix-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "library.lisp"
+                  (("libpango-[0-9.]*\\.so" all)
+                   (search-input-file inputs (string-append "/lib/" all)))
+                  (("libpangocairo-[0-9.]*\\.so" all)
+                   (search-input-file inputs (string-append "/lib/" all)))))))))
+      (inputs (list sbcl-cffi sbcl-cl-cairo2 sbcl-xmls pango cairo))
+      (home-page "https://github.com/BradWBeer/cl-pango")
+      (synopsis "Pango bindings for Common Lisp")
+      (description "Bindings to the pango text layout library")
+      (license license:expat))))
+
 (define-public sbcl-cl-cffi-gtk
   (let ((commit "1700fe672c65455c1fc33061ec92a3df84287ec7")
         (revision "3"))
--
2.46.0

>From f59728ef1d12e4eeebcab9fbb7ac10f6ca41f17a Mon Sep 17 00:00:00 2001
From: Grigory Shepelev <[email-masked]>
Date: Sat, 12 Oct 2024 19:22:57 +0300
Subject: [PATCH 4/5] lisp-xyz: + sbcl-input-event-codes

Change-Id: Ib063f55a32c570741a05957139452de2b1514558
---
 gnu/packages/lisp-xyz.scm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index c7274e1f43..ee99e213c3 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -31942,6 +31942,30 @@ (define-public sbcl-xkb
 @end itemize")
       (license license:bsd-3))))

+(define-public sbcl-input-event-codes
+  (let ((commit "9804fe1e8fcfaab51097ea30e1045b7cc5e0ef3e")
+        (revision "1")
+        (hash "1m96m9ia4frcn2xqaw4mfspjjzwl8gyj4k4rv0lq28va4s6mkgii"))
+    (package
+      (name "sbcl-input-event-codes")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.sr.ht/~shunter/input-event-codes")
+               (commit commit)))
+         (file-name (git-file-name "sbcl-input-event-codes" version))
+         (sha256 (base32 hash))))
+      (build-system asdf-build-system/sbcl)
+      (native-inputs (list pkg-config))
+      (arguments (list #:asd-systems ''("input-event-codes" "input-event-codes/test")))
+      (inputs (list sbcl-trivial-features sbcl-parachute))
+      (home-page "https://git.sr.ht/~shunter/input-event-codes")
+      (synopsis "This little library is a port of all constants found in input-event-codes.h, an event code header file found on both Linux and FreeBSD")
+      (description "")
+      (license license:expat))))
+
 (define-public sbcl-xml-emitter
   (package
     (name "sbcl-xml-emitter")
--
2.46.0

>From 0446be519d70817768b8b1e229a82759ac36a510 Mon Sep 17 00:00:00 2001
From: Grigory Shepelev <[email-masked]>
Date: Fri, 11 Oct 2024 12:25:42 +0300
Subject: [PATCH 5/5] lisp-xyz: + wayflan

---
 gnu/packages/lisp-xyz.scm | 58 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)

diff --git a/gnu/packages/lisp-xyz.scm b/gnu/packages/lisp-xyz.scm
index ee99e213c3..5ede6a4ace 100644
--- a/gnu/packages/lisp-xyz.scm
+++ b/gnu/packages/lisp-xyz.scm
@@ -10452,6 +10452,64 @@ (define-public cl-wayland
 (define-public ecl-cl-wayland
   (sbcl-package->ecl-package sbcl-cl-wayland))

+(define-public sbcl-wayflan
+  (let ((commit "3fbd2164e96aece3993929c7076593a2ee594f50")
+        (revision "1")
+        (hash "0y6hzskp1vgaigzj5b3i695sc6dn5mk7nlxs21nh5ybzmf4chhyy"))
+    (package
+      (name "sbcl-wayflan")
+      (version (git-version "0.0.4" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://git.sr.ht/~shunter/wayflan")
+               (commit commit)))
+         (file-name (git-file-name "wayflan" version))
+         (sha256 (base32 hash))))
+      (build-system asdf-build-system/sbcl)
+      (arguments (list
+                  #:tests? #f ;; tries to look for wayflan-client/test
+                  #:asd-systems
+                  ''("wayflan-client"
+                     ;; "wayflan-client/examples" fails on wayland-keyboard-demo.lisp cos xkb not required verbosely, just used as "xkb:…"
+                     "wayflan"
+                     "wayflan/common"
+                     "wayflan/test")))
+      (inputs
+       (list sbcl-cffi
+             sbcl-alexandria
+             sbcl-babel
+             sbcl-plump
+             sbcl-parachute
+             sbcl-cl-colors
+             sbcl-cl-cairo2
+             sbcl-closer-mop
+
+             sbcl-input-event-codes
+             sbcl-xkb
+             sbcl-cl-pango
+             sbcl-posix-shm
+
+             wayland))
+      (home-page  "https://git.sr.ht/~shunter/wayflan")
+      (synopsis "Wayflan is a from-scratch Wayland communication library for Common Lisp. It is not a binding or a wrapper around libwayland, but a re-implementation of the Wayland protocol. This unties Lisp applications from per-proxy manual memory allocation, toplevel-only C callbacks, and enables a closer interface with lisp")
+      (description "Wayflan makes a good-faith effort to mimic @code{libwayland} behavior not defined in the Wayland spec, to keep compatibility between the two libraries.
+
+Wayflan is not a compositor nor a GUI toolkit. Its purpose is to parse Wayland protocol XML documents and exchange Wayland messages between other processes.
+
+Wayflan is an ongoing project. Things may change to make Wayflan the best client for Common Lisp projects, such as iterating on a better API. If you use Wayflan in any projects, let me know! I'd love to give a heads up and help transition projects to any breaking changes I make along the way.
+
+Features:
+@itemize
+@item Client support
+@item All implementation done in Common Lisp from the socket up
+@item Enum values are translated into keywords
+@item Wayland protocol introspection
+@item ASDF component @code{:wayflan-client-imp}l generates code from XML. ASDF's extensible components make it possible to teach your program new protocols for Wayland without the need of a special build system.
+@end itemize")
+      (license license:bsd-3))))
+
 (define-public sbcl-cl-webkit
   (package
     (name "sbcl-cl-webkit")
--
2.46.0