+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-reference-to-llvmlite.so
+ ;; ctypes.CDLL uses dlopen to load libllvmlite.so, which
+ ;; fails, so locate it by its absolute path. Change it in
+ ;; ffi.py, not utils.py, because setup.py relies on the
+ ;; output of get_library_name for proper installation.
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (libllvmlite.so (string-append out "/lib/python"
+ ,(version-major+minor
+ (package-version python))
+ "/site-packages/llvmlite/"
+ "binding/libllvmlite.so")))
+ (substitute* "llvmlite/binding/ffi.py"
+ (("_lib_name = get_library_name\\(\\)")
+ (format #f "_lib_name = ~s" libllvmlite.so)))
+ #t)))
+ (add-after 'unpack 'skip-failing-tests
+ (lambda _
+ (substitute* "llvmlite/tests/test_binding.py"
+ ((" def test_libm\\(self\\).*" all)
+ (string-append " @unittest.skip('Fails on Guix')\n" all)))
+ #t))
+ (add-before 'build 'set-compiler/linker-flags
+ (lambda* (#:key inputs #:allow-other-keys)
+ (let ((llvm (assoc-ref inputs "llvm")))
+ ;; Refer to ffi/Makefile.linux.
+ (setenv "CPPFLAGS" "-fPIC")
+ (setenv "LDFLAGS" (string-append "-Wl,-rpath="
+ llvm "/lib"))
+ #t))))))