diff options
author | Sharlatan Hellseher <sharlatanus@gmail.com> | 2024-11-10 20:40:32 +0000 |
---|---|---|
committer | Sharlatan Hellseher <sharlatanus@gmail.com> | 2024-12-13 20:23:18 +0000 |
commit | 5c3e101ef470e7ee80fed1bc7afdf6fdf9ed4e7b (patch) | |
tree | 5d09238f0336c26484fa056b4d1f61d387d65e9d | |
parent | 45b51c7ed7d2daf781d3878db785df71fef3719b (diff) | |
download | guix-5c3e101ef470e7ee80fed1bc7afdf6fdf9ed4e7b.tar.gz guix-5c3e101ef470e7ee80fed1bc7afdf6fdf9ed4e7b.zip |
gnu: python-cffi: Improve package style.
* gnu/packages/libffi.scm: Add python-build and pyproject
modules. Select just pypi-uri symbol from python module.
(python-cffi): Fix indenation and adjust order of fileds.
[build-system]: Swap to pyproject-build-system.
[arguments]<test-flags>: Move tests directories and deselcect options
here.
<phases>: Use default 'check phase. Add 'set-gcc phase.
[native-inputs]: Add python-setuptools and python-wheel.
Change-Id: I0baa120ac86ef1c1e90cf44a4d439d874b8920b5
-rw-r--r-- | gnu/packages/libffi.scm | 110 |
1 files changed, 59 insertions, 51 deletions
diff --git a/gnu/packages/libffi.scm b/gnu/packages/libffi.scm index 8188d3ed9d..5ac092da1c 100644 --- a/gnu/packages/libffi.scm +++ b/gnu/packages/libffi.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2019, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; Copyright © 2020 John Doe <dftxbs3e@free.fr> ;;; Copyright © 2024 Janneke Nieuwenhuizen <janneke@gnu.org> +;;; Copyright © 2024 Sharlatan Hellseher <sharlatanus@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,11 +37,13 @@ #:use-module (gnu packages check) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) + #:use-module (gnu packages python-build) #:use-module (gnu packages python-xyz) #:use-module (gnu packages ruby) #:use-module (gnu packages sphinx) #:use-module (guix build-system gnu) - #:use-module (guix build-system python) + #:use-module (guix build-system pyproject) + #:use-module ((guix build-system python) #:select (pypi-uri)) #:use-module (guix build-system ruby)) (define-public libffi @@ -103,60 +106,65 @@ conversions for values passed between the two languages.") (version "1.17.1") (source (origin - (method url-fetch) - (uri (pypi-uri "cffi" version)) - (sha256 - (base32 "0918qn4yfjfgcy7i4imfy9q1cvl3svmm06anakflig1jdh0wcf8w")))) - (build-system python-build-system) + (method url-fetch) + (uri (pypi-uri "cffi" version)) + (sha256 + (base32 "0918qn4yfjfgcy7i4imfy9q1cvl3svmm06anakflig1jdh0wcf8w")))) + (build-system pyproject-build-system) + (arguments + (list + #:test-flags + #~(list "src/c/" "testing/" + ;; Disable tests that fail (harmlessly) with glibc 2.34 and + ;; later, see + ;; <https://foss.heptapod.net/pypy/cffi/-/issues/528>. + "--deselect=testing/cffi0/test_ffi_backend.py::TestFFI::test_dlopen_handle" + "--deselect=testing/cffi1/test_re_python.py::test_dlopen_handle") + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'set-gcc + (lambda _ + ;; XXX The "normal" approach of setting CC and friends does + ;; not work here. Is this the correct way of doing things? + (substitute* "testing/embedding/test_basic.py" + (("c = distutils\\.ccompiler\\.new_compiler\\(\\)") + (string-append "c = distutils.ccompiler.new_compiler();" + "c.set_executables(compiler='gcc'," + "compiler_so='gcc',linker_exe='gcc'," + "linker_so='gcc -shared')"))) + (substitute* "testing/cffi0/test_ownlib.py" + (("\"cc testownlib") "\"gcc testownlib")))) + (add-before 'check 'patch-paths-of-dynamically-loaded-libraries + (lambda* (#:key inputs #:allow-other-keys) + ;; Shared libraries should be referred by their absolute path as + ;; using find_library or the like with their name fail when the + ;; resolved .so object is a linker script rather than an ELF + ;; binary (this is a limitation of the ctype library of Python). + (let ((libm (search-input-file inputs "lib/libm.so.6")) + (libc (search-input-file inputs "lib/libc.so.6"))) + (substitute* '("testing/cffi0/test_function.py" + "testing/cffi0/test_parsing.py" + "testing/cffi0/test_unicode_literals.py" + "testing/cffi0/test_zdistutils.py" + "testing/cffi1/test_recompiler.py") + (("lib_m = ['\"]{1}m['\"]{1}") + (format #f "lib_m = '~a'" libm))) + (substitute* '("testing/cffi0/test_verify.py" + "testing/cffi1/test_verify1.py") + (("lib_m = \\[['\"]{1}m['\"]{1}\\]") + (format #f "lib_m = ['~a']" libm))) + (substitute* "src/c/test_c.py" + (("find_and_load_library\\(['\"]{1}c['\"]{1}") + (format #f "find_and_load_library('~a'" libc))))))))) + (native-inputs + (list pkg-config + python-pytest + python-setuptools + python-wheel)) (inputs (list libffi)) (propagated-inputs ; required at run-time (list python-pycparser)) - (native-inputs - (list pkg-config python-pytest)) - (arguments - `(#:phases - (modify-phases %standard-phases - (replace 'check - (lambda _ - ;; XXX The "normal" approach of setting CC and friends does - ;; not work here. Is this the correct way of doing things? - (substitute* "testing/embedding/test_basic.py" - (("c = distutils\\.ccompiler\\.new_compiler\\(\\)") - (string-append "c = distutils.ccompiler.new_compiler();" - "c.set_executables(compiler='gcc'," - "compiler_so='gcc',linker_exe='gcc'," - "linker_so='gcc -shared')"))) - (substitute* "testing/cffi0/test_ownlib.py" - (("\"cc testownlib") "\"gcc testownlib")) - (invoke "pytest" "-v" "src/c/" "testing/" - ;; Disable tests that fail (harmlessly) with glibc - ;; 2.34 and later: - ;; https://foss.heptapod.net/pypy/cffi/-/issues/528 - "-k" (string-append "not TestFFI.test_dlopen_handle " - "and not test_dlopen_handle")))) - (add-before 'check 'patch-paths-of-dynamically-loaded-libraries - (lambda* (#:key inputs #:allow-other-keys) - ;; Shared libraries should be referred by their absolute path as - ;; using find_library or the like with their name fail when the - ;; resolved .so object is a linker script rather than an ELF - ;; binary (this is a limitation of the ctype library of Python). - (let ((libm (search-input-file inputs "lib/libm.so.6")) - (libc (search-input-file inputs "lib/libc.so.6"))) - (substitute* '("testing/cffi0/test_function.py" - "testing/cffi0/test_parsing.py" - "testing/cffi0/test_unicode_literals.py" - "testing/cffi0/test_zdistutils.py" - "testing/cffi1/test_recompiler.py") - (("lib_m = ['\"]{1}m['\"]{1}") - (format #f "lib_m = '~a'" libm))) - (substitute* '("testing/cffi0/test_verify.py" - "testing/cffi1/test_verify1.py") - (("lib_m = \\[['\"]{1}m['\"]{1}\\]") - (format #f "lib_m = ['~a']" libm))) - (substitute* "src/c/test_c.py" - (("find_and_load_library\\(['\"]{1}c['\"]{1}") - (format #f "find_and_load_library('~a'" libc))))))))) (home-page "https://cffi.readthedocs.io/") (synopsis "Foreign function interface for Python") (description "Foreign Function Interface for Python calling C code.") |