~ruther/guix-local

18bf6c69be5d8eceaa30a089c61272a403ec8492 — Jean-Pierre De Jesus DIAZ 2 years ago c307a18
gnu: python-pyusb: Add libusb-compat backend.

* gnu/packages/libusb.scm (python-pyusb) <arguments>: Do not hard-code
  libusb1 library for all back-ends, and allow to use libusb0 as a
  back-end.  Also enabled tests as the package does have a test suite.

* gnu/packages/libusb.scm (python-pyusb) <inputs>: Add libusb-compat.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
1 files changed, 40 insertions(+), 12 deletions(-)

M gnu/packages/libusb.scm
M gnu/packages/libusb.scm => gnu/packages/libusb.scm +40 -12
@@ 288,28 288,56 @@ wrapper for accessing libusb-1.0.")
         "1fg7knfzybzija2b01pzrzhzsj989scl12sb2ra4f503l8279k54"))))
    (build-system python-build-system)
    (arguments
     (list #:tests? #f                      ; no tests
           #:modules '((srfi srfi-1)
     (list #:modules '((srfi srfi-1)
                       (srfi srfi-26)
                       (guix build utils)
                       (guix build python-build-system))
           #:phases
           #~(modify-phases %standard-phases
               ;; Repurpose the candidates parameter to be the path to the
               ;; library, then on each backend we substitute the candidates
               ;; with the full path to the .so library or with None if not
               ;; supported.
               ;;
               ;; While most applications could use a single back-end this
               ;; library allows to manually select the back-end so it is
               ;; appropriate to provide as much back-ends as possible.
               (add-after 'unpack 'fix-libusb-reference
                 (lambda* (#:key inputs #:allow-other-keys)
                   (substitute* "usb/libloader.py"
                     (("lib = locate_library\\(candidates, find_library\\)")
                      (string-append
                       "lib = \""
                       (find (negate symbolic-link?)
                             (find-files (assoc-ref inputs "libusb")
                                         "^libusb-.*\\.so\\..*"))
                       "\""))))))))

                   (let ((libusb0 (find
                                    (negate symbolic-link?)
                                    (find-files (assoc-ref inputs "libusb-compat")
                                                "^libusb-.*\\.so\\..*")))
                         (libusb1 (find
                                    (negate symbolic-link?)
                                    (find-files (assoc-ref inputs "libusb")
                                                "^libusb-.*\\.so\\..*"))))
                     (substitute* "usb/libloader.py"
                       (("lib = locate_library\\(candidates, find_library\\)")
                        "lib = candidates"))
                     (substitute* "usb/backend/libusb0.py"
                       (("\\('usb-0\\.1', 'usb', 'libusb0'\\)")
                        (format #f "~s" libusb0)))
                     (substitute* "usb/backend/libusb1.py"
                       (("\\('usb-1\\.0', 'libusb-1\\.0', 'usb'\\)")
                        (format #f "~s" libusb1)))
                     ;; FIXME: OpenUSB is not packaged for GNU Guix.
                     (substitute* "usb/backend/openusb.py"
                       (("\\('openusb',\\)") "None")))))
               ;; Note: tests seems to succeed with libusb-compat as libusb
               ;; fails because it doesn't have a usbfs present in the build
               ;; environment.
               (replace 'check
                 (lambda* (#:key tests? #:allow-other-keys)
                   (when tests?
                     (with-directory-excursion "tests"
                       (setenv "PYUSB_DEBUG" "debug")
                       (setenv "LIBUSB_DEBUG" "4")
                       (invoke "python" "testall.py"))))))))
    (native-inputs
     (list python-setuptools-scm))
    (inputs
     (list libusb))
     (list libusb libusb-compat))
    (home-page "https://pyusb.github.io/pyusb/")
    (synopsis "Python bindings to the libusb library")
    (description