From 298a8d0b89bb44ccb6b7058ded17a55ae831c96a Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 8 Dec 2021 12:00:48 +0100 Subject: [PATCH] gnu: khmer: Cythonize source files. * gnu/packages/bioinformatics.scm (khmer)[source]: Remove generated files. [arguments]: Add phase 'do-use-cython to patch the setup.py to generate cpp files from Cython sources; add 'build-extensions phase; replace 'check phase. --- gnu/packages/bioinformatics.scm | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm index 741e632eb1..d8fb3024ad 100644 --- a/gnu/packages/bioinformatics.scm +++ b/gnu/packages/bioinformatics.scm @@ -5082,7 +5082,9 @@ (define-public khmer (("# libraries = z,bz2") "libraries = z,bz2") (("include:third-party/zlib:third-party/bzip2") - "include:")))))) + "include:")) + ;; Delete generated Cython CPP files. + (for-each delete-file (find-files "khmer/_oxli/" "\\.cpp$")))))) (build-system python-build-system) (arguments `(#:phases @@ -5095,13 +5097,24 @@ (define-public khmer (substitute* "sandbox/sweep-reads.py" (("time\\.clock") "time.process_time")))) - (add-before 'reset-gzip-timestamps 'make-files-writable - (lambda* (#:key outputs #:allow-other-keys) - ;; Make sure .gz files are writable so that the - ;; 'reset-gzip-timestamps' phase can do its work. - (let ((out (assoc-ref outputs "out"))) - (for-each make-file-writable - (find-files out "\\.gz$")))))))) + (add-after 'unpack 'do-use-cython + (lambda _ + (substitute* "setup.py" + (("from setuptools import Extension as CyExtension") + "from Cython.Distutils import Extension as CyExtension") + (("from setuptools.command.build_ext import build_ext as _build_ext") + "from Cython.Distutils import build_ext as _build_ext") + (("HAS_CYTHON = False") "HAS_CYTHON = True") + (("cy_ext = 'cpp'") "cy_ext = 'pyx'")))) + (add-before 'build 'build-extensions + (lambda _ + ;; Cython extensions have to be built before running the tests. + (invoke "python" "setup.py" "build_ext" "--inplace"))) + (replace 'check + (lambda* (#:key tests? inputs outputs #:allow-other-keys) + (when tests? + (add-installed-pythonpath inputs outputs) + (invoke "pytest" "-v"))))))) (native-inputs `(("python-cython" ,python-cython) ("python-pytest" ,python-pytest)