Subject: [bug#70855] [PATCH 15/92] gnu: python-xcffib: Move to (gnu packages xorg).

From: Nicolas Graves <[email-masked]>
Date: Fri, 10 May 2024 00:53:10 +0200

* /gnu/packages/python-xyz.scm (python-xcffib): Move from here…
* gnu/packages/xorg.scm (python-xcffib): …to here.

The package's build is fully rewritten and updated to version 1.5.0.

Change-Id: Ia77b9fc2160dacd77c3eaf4199278046a52515d7
---
 gnu/packages/python-xyz.scm | 44 -------------------------------------
 gnu/packages/xorg.scm       | 41 ++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 44 deletions(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index e1e8ef7caa0..b34af56a1db 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -11139,50 +11139,6 @@ (define-public python-manimpango
 ManimPango is internally used in Manim to render (non-LaTeX) text.")
     (license license:expat)))
 
-(define-public python-xcffib
-  (package
-    (name "python-xcffib")
-    (version "0.11.1")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (pypi-uri "xcffib" version))
-      (sha256
-       (base32
-        "0nkglsm9nbhv238iagmmsjcz6lf1yfdvp5kmspphdj385vz9r50j"))))
-    (build-system python-build-system)
-    (inputs
-     (list libxcb))
-    (propagated-inputs
-     (list python-cffi ; used at run time
-           python-six))
-    (arguments
-     `(;; FIXME: Tests need more work. See ".travis.yml" in the repository.
-       #:tests? #f
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'fix-libxcb-path
-           (lambda* (#:key inputs #:allow-other-keys)
-             (let ((libxcb (assoc-ref inputs "libxcb")))
-               (substitute* '("xcffib/__init__.py")
-                 (("soname = ctypes.util.find_library.*xcb.*")
-                  (string-append "soname = \"" libxcb "/lib/libxcb.so\"\n")))
-               #t)))
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((doc (string-append (assoc-ref outputs "out") "/share"
-                                       "/doc/" ,name "-" ,version)))
-               (mkdir-p doc)
-               (copy-file "README.md"
-                          (string-append doc "/README.md"))
-               #t))))))
-    (home-page "https://github.com/tych0/xcffib")
-    (synopsis "XCB Python bindings")
-    (description
-     "Xcffib is a replacement for xpyb, an XCB Python bindings.  It adds
-support for Python 3 and PyPy.  It is based on cffi.")
-    (license license:expat)))
-
 (define-public python-cairocffi
   (package
     (name "python-cairocffi")
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index fbe6375818f..2bc6946599c 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -65,6 +65,7 @@ (define-module (gnu packages xorg)
   #:use-module (guix build-system meson)
   #:use-module (guix build-system perl)
   #:use-module (guix build-system python)
+  #:use-module (guix build-system pyproject)
   #:use-module (guix utils)
   #:use-module (gnu packages)
   #:use-module (gnu packages aidc)
@@ -92,6 +93,7 @@ (define-module (gnu packages xorg)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages libedit)
+  #:use-module (gnu packages libffi)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages llvm)
   #:use-module (gnu packages m4)
@@ -1706,6 +1708,45 @@ (define xcffibgen
 generate code for the @code{python-xcbffib} package.")
     (license license:expat)))
 
+(define-public python-xcffib
+  (package
+    (name "python-xcffib")
+    (version "1.5.0")
+    (source (package-source xcffibgen))
+    (build-system pyproject-build-system)
+    (native-inputs
+     (list pkg-config which xcb-proto xcffibgen))
+    (inputs
+     (list libxcb))
+    (propagated-inputs
+     (list python-cffi ; used at run time
+           python-six))
+    (arguments
+     (list
+      ;; Tests seem to require version 3.12 of Python.
+      #:tests? #f
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-before 'build 'generate-bindings
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "Makefile"
+                (("^GEN=.*")
+                 (format #f "GEN=~a~%"
+                         (search-input-file inputs "/bin/xcffibgen"))))
+              (invoke "make" "xcffib")))
+          (add-before 'build 'fix-libxcb-path
+            (lambda* (#:key inputs #:allow-other-keys)
+              (substitute* "xcffib/__init__.py"
+                (("ctypes\\.util\\.find_library\\(\"xcb\"\\)")
+                 (format #f "~s"
+                         (search-input-file inputs "/lib/libxcb.so.1")))))))))
+    (home-page "https://github.com/tych0/xcffib")
+    (synopsis "XCB Python bindings")
+    (description
+     "Xcffib is a replacement for xpyb, an XCB Python bindings.  It adds
+support for Python 3 and PyPy.  It is based on cffi.")
+    (license license:expat)))
+
 (define-public randrproto
   (package
     (name "randrproto")
-- 
2.41.0