projects/guix·blob java-team · refs

968 lines · 37.3 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2012 Nikita Karetnikov <[email protected]>
3;;; Copyright © 2015 Andreas Enge <[email protected]>
4;;; Copyright © 2015 Andy Wingo <[email protected]>
5;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2024 Ricardo Wurmus <[email protected]>
6;;; Copyright © 2016 Efraim Flashner <[email protected]>
7;;; Copyright © 2016 Theodoros Foradis <[email protected]>
8;;; Copyright © 2017 Jonathan Brielmaier <[email protected]>
9;;; Copyright © 2018, 2020–2022 Tobias Geerinckx-Rice <[email protected]>
10;;; Copyright © 2018 Vagrant Cascadian <[email protected]>
11;;; Copyright © 2020 Marius Bakke <[email protected]>
12;;; Copyright © 2020 Christopher Howard <[email protected]>
13;;; Copyright © 2021 Guillaume Le Vaillant <[email protected]>
14;;; Copyright © 2021 Martin Becze <[email protected]>
15;;; Copyright © 2022 Jacob Hrbek <[email protected]>
16;;; Copyright © 2023 Sharlatan Hellseher <[email protected]>
17;;; Copyright © 2023 Foundation Devices, Inc. <[email protected]>
18;;; Copyright © 2024 hapster <[email protected]>
19;;; Copyright © 2025 Janneke Nieuwenhuizen <[email protected]>
20;;; Copyright © 2025 Evgeny Pisemsky <[email protected]>
21;;; Copyright © 2025 James Smith <[email protected]>
22;;;
23;;; This file is part of GNU Guix.
24;;;
25;;; GNU Guix is free software; you can redistribute it and/or modify it
26;;; under the terms of the GNU General Public License as published by
27;;; the Free Software Foundation; either version 3 of the License, or (at
28;;; your option) any later version.
29;;;
30;;; GNU Guix is distributed in the hope that it will be useful, but
31;;; WITHOUT ANY WARRANTY; without even the implied warranty of
32;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33;;; GNU General Public License for more details.
34;;;
35;;; You should have received a copy of the GNU General Public License
36;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
37
38(define-module (gnu packages libusb)
39 #:use-module ((guix licenses) #:prefix license:)
40 #:use-module (guix build-system ant)
41 #:use-module (guix build-system cmake)
42 #:use-module (guix build-system glib-or-gtk)
43 #:use-module (guix build-system gnu)
44 #:use-module (guix build-system go)
45 #:use-module (guix build-system pyproject)
46 #:use-module (guix download)
47 #:use-module (guix gexp)
48 #:use-module (guix git-download)
49 #:use-module (guix packages)
50 #:use-module (guix utils)
51 #:use-module (gnu packages)
52 #:use-module (gnu packages autotools)
53 #:use-module (gnu packages compression)
54 #:use-module (gnu packages curl)
55 #:use-module (gnu packages gnupg)
56 #:use-module (gnu packages gtk)
57 #:use-module (gnu packages java)
58 #:use-module (gnu packages linux)
59 #:use-module (gnu packages mp3)
60 #:use-module (gnu packages pkg-config)
61 #:use-module (gnu packages python)
62 #:use-module (gnu packages python-build)
63 #:use-module (gnu packages python-xyz)
64 #:use-module (gnu packages readline)
65 #:use-module (gnu packages tls)
66 #:use-module (gnu packages xiph))
67
68(define-public libusb
69 (package
70 (name "libusb")
71 (version "1.0.25")
72 (source
73 (origin
74 (method url-fetch)
75 (uri (string-append "https://github.com/libusb/libusb/"
76 "releases/download/v" version
77 "/libusb-" version ".tar.bz2"))
78 (sha256
79 (base32 "0j88ym7afy4wj3x789zzxsr04asyjy0mw29gf31blzkrg8cyya4a"))))
80 (build-system gnu-build-system)
81
82 ;; XXX: Enabling udev is now recommended, but eudev indirectly depends on
83 ;; libusb.
84 (arguments `(#:configure-flags '("--disable-udev")))
85 ;; (inputs `(("eudev" ,eudev)))
86
87 (home-page "https://libusb.info")
88 (synopsis "User-space USB library")
89 (description
90 "Libusb is a library that gives applications easy access to USB
91devices on various operating systems.")
92 (license license:lgpl2.1+)))
93
94(define-public libusb-next
95 (package
96 (inherit libusb)
97 (name "libusb-next")
98 (version "1.0.29")
99 (source
100 (origin
101 (method url-fetch)
102 (uri (string-append "https://github.com/libusb/libusb/"
103 "releases/download/v" version
104 "/libusb-" version ".tar.bz2"))
105 (sha256
106 (base32 "118alz1rzqp6qaq486wn5hygs27qnc38rm4vxb69a4wd1yazqxsr"))))))
107
108(define-public libusb-compat
109 (package
110 (name "libusb-compat")
111 (version "0.1.8")
112 (source
113 (origin
114 (method url-fetch)
115 (uri (string-append "mirror://sourceforge/libusb/"
116 "libusb-compat-" (version-major+minor version) "/"
117 "libusb-compat-" version "/"
118 "libusb-compat-" version ".tar.bz2"))
119 (sha256
120 (base32 "0p5hz5q1ppd4d2wwhzfp4vwh6ngfwh627j73pv0chw60fkvdr4mn"))
121 (snippet #~(begin
122 ;; Delete Autotools-generated files.
123 (use-modules (guix build utils))
124 (delete-file "configure")
125 (for-each delete-file (find-files "^Makefile\\.in$"))))))
126 (build-system gnu-build-system)
127 (arguments
128 (list #:configure-flags
129 #~(list "--disable-static"
130 ;; Provide the absolute file name of libusb-1.0.so so
131 ;; dlopen works.
132 (string-append "LIBUSB_1_0_SONAME="
133 #$(this-package-input "libusb")
134 "/lib/libusb-1.0.so"))))
135 (native-inputs (list autoconf automake libtool pkg-config))
136 (inputs (list libusb))
137 (home-page "https://libusb.info")
138 (synopsis "Compatibility shim for libusb")
139 (description
140 "Libusb-compat provides a shim allowing applications based on older
141version of libusb to run with newer libusb.")
142 (license license:lgpl2.1+)))
143
144;; required by 0xffff, which compiles with libusb-compat, but executes only
145;; with libusb-0.1
146(define-public libusb-0.1
147 (package (inherit libusb)
148 (version "0.1.12")
149 (source
150 (origin
151 (method url-fetch)
152 (uri (string-append "mirror://sourceforge/libusb/libusb-0.1 (LEGACY)/"
153 version "/libusb-" version ".tar.gz"))
154 (sha256
155 (base32
156 "0i4bacxkyr7xyqxbmb00ypkrv4swkgm0mghbzjsnw6blvvczgxip"))
157 (patches (search-patches "libusb-0.1-disable-tests.patch"))))
158 (arguments `(#:configure-flags (list "CFLAGS=-Wno-error")))))
159
160(define-public libusb4java
161 ;; There is no public release so we take the latest version from git.
162 (let ((commit "0842e8104d8772da873314e233aa625f5651fd34")
163 (revision "1"))
164 (package
165 (name "libusb4java")
166 (version (git-version "1.3.1" revision commit))
167 (source (origin
168 (method git-fetch)
169 (uri (git-reference
170 (url "https://github.com/usb4java/libusb4java")
171 (commit commit)))
172 (file-name (git-file-name name version))
173 (sha256
174 (base32
175 "16hz0h8fvrr764gwj90yny1kxpf0y7p2czr7pdrw3qby21fqkzrq"))))
176 (build-system cmake-build-system)
177 (arguments
178 (list
179 #:tests? #f ;there are no tests
180 #:phases
181 #~(modify-phases %standard-phases
182 (add-before 'configure 'set-JAVA_HOME
183 (lambda _
184 (setenv "JAVA_HOME" #$(this-package-native-input "jdk")))))))
185 (inputs
186 (list libusb))
187 (native-inputs
188 `(("jdk" ,icedtea "jdk")))
189 (home-page "https://github.com/usb4java/libusb4java/")
190 (synopsis "JNI bindings to libusb")
191 (description
192 "This package provides Java JNI bindings to the libusb library for use
193with usb4java.")
194 (license license:expat))))
195
196(define-public go-github-com-google-gousb
197 (package
198 ;; See <https://github.com/google/gousb/issues/124> for picking up the
199 ;; correct version.
200 (name "go-github-com-google-gousb")
201 (version "1.1.3")
202 (source
203 (origin
204 (method git-fetch)
205 (uri (git-reference
206 (url "https://github.com/google/gousb")
207 (commit (string-append "v" version))))
208 (sha256
209 (base32 "1rl43y2nn1fysnlvkkcba2rb4d4pqbab8v4v9zw0xv9j4x2r5hv1"))
210 (file-name (git-file-name name version))))
211 (build-system go-build-system)
212 (arguments
213 (list
214 #:import-path "github.com/google/gousb"))
215 (native-inputs
216 (list pkg-config))
217 ;; It's for purpose to prevent failing of missing libusb when this package
218 ;; is included as inputs to build others.
219 (propagated-inputs
220 (list libusb))
221 (home-page "https://github.com/google/gousb")
222 (synopsis "Low-level interface for accessing USB devices in Golang")
223 (description
224 "The gousb package is an attempt at wrapping the libusb library into a
225Go-like binding.")
226 (license license:asl2.0)))
227
228(define-public java-usb4java
229 (package
230 (name "java-usb4java")
231 (version "1.3.0")
232 (source (origin
233 (method git-fetch)
234 (uri (git-reference
235 (url "https://github.com/usb4java/usb4java")
236 (commit (string-append "usb4java-" version))))
237 (file-name (git-file-name name version))
238 (sha256
239 (base32
240 "0fwf8d2swgm8pmvssy53ixnc0pb5bfvc8iy42mf3dwgvr1zzvgmv"))))
241 (build-system ant-build-system)
242 (arguments
243 (list
244 #:jar-name "usb4java.jar"
245 #:phases
246 #~(modify-phases %standard-phases
247 ;; Usually, native libusb4java libraries for all supported systems
248 ;; would be included in the jar and extracted at runtime. Since we
249 ;; build everything from source we cannot just bundle pre-built
250 ;; binaries for other systems. Instead, we patch the loader to
251 ;; directly return the appropriate library for this system. The
252 ;; downside is that the jar will only work on the same architecture
253 ;; that it was built on.
254 (add-after 'unpack 'copy-libusb4java
255 (lambda* (#:key inputs #:allow-other-keys)
256 (substitute* "src/main/java/org/usb4java/Loader.java"
257 (("private static String extractLibrary" line)
258 (string-append
259 line "(final String a, final String b) {"
260 "return \""
261 (search-input-file inputs "/lib/libusb4java.so")
262 "\"; }\n"
263 "private static String _extractLibrary")))))
264 (add-after 'unpack 'disable-broken-tests
265 (lambda _
266 (with-directory-excursion "src/test/java/org/usb4java"
267 ;; These tests should only be run when USB devices are present.
268 (substitute* '("LibUsbGlobalTest.java"
269 "TransferTest.java")
270 (("this.context = new Context\\(\\);")
271 "this.context = null;"))))))))
272 (inputs
273 (list libusb4java java-commons-lang3 java-junit java-hamcrest-core))
274 (home-page "http://usb4java.org/")
275 (synopsis "USB library for Java")
276 (description
277 "This package provides a USB library for Java based on libusb and
278implementing @code{javax.usb} (JSR-80).")
279 (license license:expat)))
280
281(define-public python-libusb1
282 (package
283 (name "python-libusb1")
284 (version "3.0.0")
285 (source
286 (origin
287 (method url-fetch)
288 (uri (pypi-uri "libusb1" version))
289 (sha256
290 (base32 "0f45rjgkq4wgyav6dz57ggj34p2l00c9n3d4639ia3z4zvgak4jp"))))
291 (build-system pyproject-build-system)
292 (arguments
293 (list
294 #:modules '((srfi srfi-1)
295 (guix build utils)
296 (guix build pyproject-build-system))
297 #:test-backend #~'custom
298 #:test-flags #~(list "-m" "usb1.testUSB1")
299 #:phases
300 #~(modify-phases %standard-phases
301 (add-before 'install-license-files 'remove-incorrect-license
302 (lambda _
303 ;; Was relicensed to LGPL 2.1+, but old COPYING file still left
304 ;; in source. Remove it so it does not get installed.
305 (delete-file "COPYING")))
306 (add-after 'unpack 'fix-libusb-reference
307 (lambda* (#:key inputs #:allow-other-keys)
308 (substitute* "usb1/_libusb1.py"
309 (("libusb_path = ctypes\\.util\\.find_library\\(base_name\\)")
310 (string-append "libusb_path = \""
311 (find (negate symbolic-link?)
312 (find-files (assoc-ref inputs "libusb")
313 "^libusb.*\\.so\\..*"))
314 "\"")))))
315 (add-after 'check 'remove-installed-tests
316 (lambda* (#:key inputs outputs #:allow-other-keys)
317 (with-directory-excursion (site-packages inputs outputs)
318 (delete-file "usb1/__pyinstaller/test_libusb1_packaging.py")
319 (delete-file "usb1/testUSB1.py")))))))
320 (native-inputs (list python-setuptools))
321 (propagated-inputs (list libusb))
322 (home-page "https://github.com/vpelletier/python-libusb1")
323 (synopsis "Pure-python wrapper for libusb-1.0")
324 (description
325 "Libusb is a library that gives applications easy access to USB devices
326on various operating systems. This package provides a Python wrapper for
327accessing libusb-1.0.")
328 (license license:lgpl2.1+)))
329
330(define-public python-pyusb
331 (package
332 (name "python-pyusb")
333 (version "1.2.1")
334 (source
335 (origin
336 (method url-fetch)
337 (uri (pypi-uri "pyusb" version))
338 (sha256
339 (base32 "1fg7knfzybzija2b01pzrzhzsj989scl12sb2ra4f503l8279k54"))))
340 (build-system pyproject-build-system)
341 (arguments
342 (list
343 #:modules '((srfi srfi-1)
344 (srfi srfi-26)
345 (guix build utils)
346 (guix build pyproject-build-system))
347 #:phases
348 #~(modify-phases %standard-phases
349 ;; Repurpose the candidates parameter to be the path to the library,
350 ;; then on each backend we substitute the candidates with the full
351 ;; path to the .so library or with None if not supported.
352 ;;
353 ;; While most applications could use a single back-end this library
354 ;; allows to manually select the back-end so it is appropriate to
355 ;; provide as much back-ends as possible.
356 (add-after 'unpack 'fix-libusb-reference
357 (lambda* (#:key inputs #:allow-other-keys)
358 (let ((libusb0 (find (negate symbolic-link?)
359 (find-files (assoc-ref inputs
360 "libusb-compat")
361 "^libusb-.*\\.so\\..*")))
362 (libusb1 (find (negate symbolic-link?)
363 (find-files (assoc-ref inputs "libusb")
364 "^libusb-.*\\.so\\..*"))))
365 (substitute* "usb/libloader.py"
366 (("lib = locate_library\\(candidates, find_library\\)")
367 "lib = candidates"))
368 (substitute* "usb/backend/libusb0.py"
369 (("\\('usb-0\\.1', 'usb', 'libusb0'\\)")
370 (format #f "~s" libusb0)))
371 (substitute* "usb/backend/libusb1.py"
372 (("\\('usb-1\\.0', 'libusb-1\\.0', 'usb'\\)")
373 (format #f "~s" libusb1)))
374 ;; FIXME: OpenUSB is not packaged for GNU Guix.
375 (substitute* "usb/backend/openusb.py"
376 (("\\('openusb',\\)")
377 "None")))))
378 ;; Note: tests seems to succeed with libusb-compat as libusb fails
379 ;; because it doesn't have a usbfs present in the build environment.
380 (replace 'check
381 (lambda* (#:key tests? #:allow-other-keys)
382 (when tests?
383 (with-directory-excursion "tests"
384 (setenv "PYUSB_DEBUG" "debug")
385 (setenv "LIBUSB_DEBUG" "4")
386 (invoke "python" "testall.py"))))))))
387 (native-inputs (list python-setuptools-scm python-setuptools))
388 (inputs (list libusb libusb-compat))
389 (home-page "https://pyusb.github.io/pyusb/")
390 (synopsis "Python bindings to the libusb library")
391 (description
392 "PyUSB aims to be an easy to use Python module to access USB devices.")
393 (license license:bsd-3)))
394
395(define-public python-capablerobot-usbhub
396 (package
397 (name "python-capablerobot-usbhub")
398 (version "0.5.0")
399 (source
400 (origin
401 ;; PyPI tarball fails to build.
402 (method git-fetch)
403 (uri (git-reference
404 (url "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
405 (commit (string-append "v" version))))
406 (file-name (git-file-name name version))
407 (sha256
408 (base32 "1nfd12612z9a9hby5dxg7lfqw5jcv3wcyqqagbg5izragni646mc"))
409 (modules '((guix build utils)))
410 (snippet
411 ;; Remove bundled libraries.
412 '(begin
413 (delete-file-recursively "capablerobot_usbhub/windows/")))))
414 (build-system pyproject-build-system)
415 (arguments
416 (list
417 #:tests? #f ;No tests provided.
418 #:phases
419 #~(modify-phases %standard-phases
420 (add-after 'unpack 'use-poetry-core
421 (lambda _
422 ;; Patch to use the core poetry API.
423 (substitute* "pyproject.toml"
424 (("poetry.masonry.api")
425 "poetry.core.masonry.api"))))
426 (add-after 'install 'install-udev-rules
427 (lambda* (#:key outputs #:allow-other-keys)
428 (let ((out (assoc-ref outputs "out"))
429 (udevdir "/lib/udev/rules.d/")
430 (udevrules "50-capablerobot-usbhub.rules"))
431 (mkdir-p (string-append out udevdir))
432 (copy-file udevrules
433 (string-append out udevdir udevrules))))))))
434 (native-inputs (list python-poetry-core))
435 (propagated-inputs (list python-click python-construct python-pyusb
436 python-pyyaml))
437 (home-page "https://github.com/CapableRobot/CapableRobot_USBHub_Driver")
438 (synopsis "Host side driver for the Capable Robot Programmable USB Hub")
439 (description
440 "This package provides access to the internal state of the Capable Robot
441USB Hub, allowing you to monitor and control the Hub from an upstream
442computer. It also creates a transparent CircuitPython Bridge, allowing
443unmodified CircuitPython code to run on the host computer and interact with
444I2C and SPI devices attached to the USB Hub.")
445 (license license:expat)))
446
447(define-public ideviceinstaller
448 (package
449 (name "ideviceinstaller")
450 (version "1.1.1")
451 (source
452 (origin
453 (method git-fetch)
454 (uri (git-reference
455 (url "https://github.com/libimobiledevice/ideviceinstaller")
456 (commit version)))
457 (file-name (git-file-name name version))
458 (sha256
459 (base32 "1xp0sjgfx2z19x9mxihn18ybsmrnrcfc55zbh5a44g3vrmagmlzz"))))
460 (build-system gnu-build-system)
461 (native-inputs (list autoconf automake libtool pkg-config))
462 (inputs (list libimobiledevice libzip))
463 (home-page "https://libimobiledevice.org/")
464 (synopsis "CLI Tool to manage apps and app archives on iOS devices")
465 (description "This package provides an interface to manage IPA format
466files and applications for iOS devices, it's written in C")
467 (license license:gpl2)))
468
469(define-public libirecovery
470 (package
471 (name "libirecovery")
472 (version "1.0.0")
473 (source (origin
474 (method git-fetch)
475 (uri (git-reference
476 (url "https://github.com/libimobiledevice/libirecovery")
477 (commit version)))
478 (file-name (git-file-name name version))
479 (sha256
480 (base32
481 "0p9ncqnz5kb7qisw00ynvasw1hax5qx241h9nwppi2g544i9lbnr"))))
482 (build-system gnu-build-system)
483 (inputs (list readline libusb))
484 (native-inputs (list autoconf automake libtool pkg-config))
485 (home-page "https://libimobiledevice.org/")
486 (synopsis "Communication library with iBoot/iBSS of iOS devices via USB")
487 (description "Libirecovery is a cross-platform library which implements
488communication to iBoot/iBSS found on Apple's iOS devices via USB.")
489 (license license:lgpl2.1)))
490
491(define-public idevicerestore
492 (package
493 (name "idevicerestore")
494 (version "1.0.0")
495 (source (origin
496 (method git-fetch)
497 (uri (git-reference
498 (url "https://github.com/libimobiledevice/idevicerestore")
499 (commit version)))
500 (file-name (git-file-name name version))
501 (sha256
502 (base32
503 "1w7ywp77xc6v4hifi3j9ywrj447vv7fkwg2w26w0lq95f3bkblqr"))))
504 (build-system gnu-build-system)
505 (inputs (list libusb libirecovery libimobiledevice libzip curl zlib))
506 (native-inputs (list autoconf automake libtool pkg-config))
507 (home-page "https://libimobiledevice.org/")
508 (synopsis "CLI tool to restore firmware files to iOS devices")
509 (description "This utility is used to restore bricked or otherwise
510broken iOS devices.")
511 (license license:lgpl3+)))
512
513(define-public libplist
514 (package
515 (name "libplist")
516 (version "2.7.0")
517 (source
518 (origin
519 (method url-fetch)
520 (uri (string-append "https://github.com/libimobiledevice"
521 "/libplist/releases/download/" version
522 "/libplist-" version ".tar.bz2"))
523 (sha256
524 (base32 "12zb8ck7r7zq7xl4wmgq1nvpraibr204fqslqviypccnx00j7i3s"))))
525 (build-system gnu-build-system)
526 (arguments
527 `(;; Tests fail randomly when run in parallel because several of them write
528 ;; and read to/from the same file--e.g., "4.plist" is accessed by
529 ;; 'large.test' and 'largecmp.test'.
530 #:parallel-tests? #f))
531 (inputs
532 (list python-wrapper))
533 (native-inputs
534 (list autoconf
535 automake
536 libtool
537 pkg-config
538 python-cython
539 python-setuptools))
540 (home-page "https://libimobiledevice.org/")
541 (synopsis "C library to handle Apple Property List files")
542 (description "This package provides a small portable C library to handle
543Apple Property List files in binary or XML.")
544 (license license:lgpl2.1+)))
545
546(define-public libusbmuxd
547 (package
548 (name "libusbmuxd")
549 (version "2.1.1")
550 (source
551 (origin
552 (method git-fetch)
553 (uri (git-reference
554 (url "https://github.com/libimobiledevice/libusbmuxd")
555 (commit version)))
556 (file-name (git-file-name name version))
557 (sha256
558 (base32 "0dlqvg65r43hl7jzjzawlksb76dk1kn3qvzc34mr9yigyxihald3"))))
559 (build-system gnu-build-system)
560 (arguments
561 (list
562 #:phases
563 #~(modify-phases %standard-phases
564 (add-after 'unpack 'set-version
565 (lambda _
566 (substitute* "git-version-gen"
567 (("/bin/sh")
568 (which "sh")))
569 (call-with-output-file ".tarball-version"
570 (lambda (port)
571 (display #$version port))))))))
572 (native-inputs
573 (list autoconf
574 automake
575 libplist
576 libtool
577 pkg-config))
578 (inputs
579 (list libimobiledevice-glue))
580 (home-page "https://libimobiledevice.org/")
581 (synopsis "Library to multiplex connections from and to iOS devices")
582 (description "This package provides a client library to multiplex
583connections from and to iOS devices by connecting to a socket provided by a
584@code{usbmuxd} daemon.")
585 (license license:lgpl2.1+)))
586
587(define-public libtatsu
588 (package
589 (name "libtatsu")
590 (version "1.0.5")
591 (source
592 (origin
593 (method git-fetch)
594 (uri (git-reference
595 (url "https://github.com/libimobiledevice/libtatsu")
596 (commit version)))
597 (file-name (git-file-name name version))
598 (sha256
599 (base32 "0vcqmr3zkpqr30hfmiz44v6iyc4fd3l2rk44iy9r03666h2k3zmx"))))
600 (build-system gnu-build-system)
601 (arguments
602 (list
603 #:phases
604 #~(modify-phases %standard-phases
605 (add-after 'unpack 'set-version
606 (lambda _
607 (substitute* "git-version-gen"
608 (("/bin/sh")
609 (which "sh")))
610 (call-with-output-file ".tarball-version"
611 (lambda (port)
612 (display #$version port))))))))
613 (propagated-inputs (list libplist))
614 (inputs (list curl))
615 (native-inputs
616 (list autoconf automake libtool pkg-config))
617 (home-page "https://libimobiledevice.org/")
618 (synopsis "Library handling communication with Tatsu Signing Server")
619 (description
620 "This package provides a library handling communication with Apple's
621@acronym{TSS, Tatsu Signing Server}.")
622 (license license:lgpl2.1+)))
623
624(define-public libimobiledevice-glue
625 (package
626 (name "libimobiledevice-glue")
627 (version "1.3.2")
628 (source
629 (origin
630 (method git-fetch)
631 (uri (git-reference
632 (url "https://github.com/libimobiledevice/libimobiledevice-glue")
633 (commit version)))
634 (file-name (git-file-name name version))
635 (sha256
636 (base32 "0yhh5k7f28b03avwdwzkz3q6jpwqamrkylyzm4ddcmyr2q0hjivi"))))
637 (build-system gnu-build-system)
638 (arguments
639 (list
640 #:phases
641 #~(modify-phases %standard-phases
642 (add-after 'unpack 'set-version
643 (lambda _
644 (substitute* "git-version-gen"
645 (("/bin/sh")
646 (which "sh")))
647 (call-with-output-file ".tarball-version"
648 (lambda (port)
649 (display #$version port))))))))
650 (propagated-inputs (list libplist))
651 (native-inputs
652 (list autoconf automake libtool pkg-config))
653 (home-page "https://libimobiledevice.org/")
654 (synopsis "Common code used by libraries and tools for libmobiledevice")
655 (description
656 "libimobiledevice is a software library that talks the protocols to
657support Apple devices. This package provides a library with common code used
658by the libraries and tools around the libimobiledevice project.")
659 (license license:lgpl2.1+)))
660
661(define-public libimobiledevice
662 (package
663 (name "libimobiledevice")
664 (version "1.4.0")
665 (source (origin
666 (method url-fetch)
667 (uri (string-append "https://github.com/libimobiledevice"
668 "/libimobiledevice/releases/download/"
669 version "/libimobiledevice-" version
670 ".tar.bz2"))
671 (sha256
672 (base32
673 "17ck2kczzsffvjg0bpqxray9k4fll1823c0fpn8xkir1w9vh1k13"))))
674 (build-system gnu-build-system)
675 (propagated-inputs
676 (list openssl
677 libimobiledevice-glue
678 libplist
679 libusbmuxd
680 libtatsu))
681 (inputs
682 (list python-wrapper))
683 (native-inputs
684 (list pkg-config python-cython python-setuptools))
685 (home-page "https://libimobiledevice.org/")
686 (synopsis "Protocol library and tools to communicate with Apple devices")
687 (description "libimobiledevice is a software library that talks the
688protocols to support Apple devices. It allows other software to easily access
689the device's file system, retrieve information about the device and its
690internals, backup/restore the device, manage installed applications, retrieve
691address books, calendars, notes, and bookmarks, and (using libgpod) synchronize
692music and video to the device.")
693 (license license:lgpl2.1+)))
694
695(define-public ifuse
696 (package
697 (name "ifuse")
698 (version "1.1.4")
699 (source (origin
700 (method url-fetch)
701 (uri (string-append "https://github.com/libimobiledevice"
702 "/ifuse/releases/download/" version
703 "/ifuse-" version ".tar.bz2"))
704 (sha256
705 (base32
706 "11wdv44qwia77sh38n36809ysaib52rwd4fvqwb5ybsbz4p70l1m"))))
707 (inputs
708 (list fuse-2 libimobiledevice))
709 (native-inputs
710 (list pkg-config))
711 (build-system gnu-build-system)
712 (home-page "https://libimobiledevice.org/")
713 (synopsis "Mount iOS devices")
714 (description "This package provides @command{ifuse}, a command to mount
715iOS devices and access their contents.")
716 (license license:lgpl2.1+)))
717
718(define-public usbmuxd
719 (package
720 (name "usbmuxd")
721 ;; 1.1.1 (2020-06-15): it's no longer compatible with libplist and
722 ;; libimobiledevice developed by the same author, the latest git changes
723 ;; provide compatibilities. Revert back on git version when released.
724 (properties '((commit . "3ded00c9985a5108cfc7591a309f9a23d57a8cba")
725 (revision . "0")))
726 (version (git-version "1.1.1"
727 (assoc-ref properties 'revision)
728 (assoc-ref properties 'commit)))
729 (source
730 (origin
731 (method git-fetch)
732 (uri (git-reference
733 (url "https://github.com/libimobiledevice/usbmuxd")
734 (commit (assoc-ref properties 'commit))))
735 (file-name (git-file-name name version))
736 (sha256
737 (base32 "1dqcdpyc7k8j657c4v0vbd7l489039qlk21d9cyzc7ns1q2iggpb"))))
738 (build-system gnu-build-system)
739 (arguments
740 (list
741 #:phases
742 #~(modify-phases %standard-phases
743 (add-after 'unpack 'set-version
744 (lambda _
745 (substitute* "git-version-gen"
746 (("/bin/sh")
747 (which "sh")))
748 (call-with-output-file ".tarball-version"
749 (lambda (port)
750 (display #$version port))))))))
751 (native-inputs
752 (list autoconf
753 automake
754 libtool
755 pkg-config))
756 (inputs
757 (list libplist libusb libimobiledevice))
758 (home-page "https://libimobiledevice.org/")
759 (synopsis "Multiplex connections over USB to an iOS device")
760 (description "This package provides the @code{usbmuxd} daemon
761which multiplexes connections over USB to an iOS device. To
762users, it means you can sync your music, contacts, photos, etc.
763over USB.")
764 (license license:gpl2+)))
765
766(define-public libmtp
767 (package
768 (name "libmtp")
769 (version "1.1.21")
770 (source (origin
771 (method url-fetch)
772 (uri (string-append "mirror://sourceforge/libmtp/libmtp/" version
773 "/libmtp-" version ".tar.gz"))
774 (sha256
775 (base32
776 "19vj10la88lrhdfdcpkad7aiii01q59y5wj700dwjj4gijmsbzy4"))))
777 (build-system gnu-build-system)
778 (native-inputs
779 (list pkg-config))
780 (inputs
781 (list libgcrypt))
782 (propagated-inputs
783 ;; libmtp.pc refers to all these.
784 (list libusb))
785 (arguments
786 (list #:configure-flags
787 #~(list "--disable-static"
788 (string-append "--with-udev=" #$output "/lib/udev"))))
789 (home-page "https://libmtp.sourceforge.net/")
790 (synopsis "Library implementing the Media Transfer Protocol")
791 (description "Libmtp implements an MTP (Media Transfer Protocol)
792initiator, which means that it initiates MTP sessions with devices. The
793devices responding are known as MTP responders. Libmtp runs on devices
794with a USB host controller interface. It implements MTP Basic, which was
795proposed for standardization.")
796 ;; COPYING contains lgpl2.1, while files headers give
797 ;; "GNU Lesser General Public License as published by the Free Software
798 ;; Foundation; either version 2 of the License, or (at your option) any
799 ;; later version."
800 (license license:lgpl2.1+)))
801
802(define-public gmtp
803 (package
804 (name "gmtp")
805 (version "1.3.11")
806 (source (origin
807 (method url-fetch)
808 (uri (string-append "mirror://sourceforge/gmtp/gMTP-" version
809 "/gmtp-" version ".tar.gz"))
810 (sha256
811 (base32
812 "04q6byyq002fhzkc2rkkahwh5b6272xakaj4m3vwm8la8jf0r0ss"))))
813 (build-system glib-or-gtk-build-system)
814 (arguments
815 '(#:configure-flags
816 (let ((libid3tag (assoc-ref %build-inputs "libid3tag")))
817 (list
818 "CFLAGS=-fcommon"
819 ;; libid3tag provides no .pc file, so pkg-config fails to find them.
820 (string-append "ID3TAG_CFLAGS=-I" libid3tag "/include")
821 (string-append "ID3TAG_LIBS=-L" libid3tag "/lib -lid3tag -lz")))))
822 (inputs
823 (list gtk+ flac libvorbis libid3tag libmtp))
824 (native-inputs
825 (list pkg-config))
826 (home-page "https://gmtp.sourceforge.net/")
827 (synopsis "Simple graphical MTP client")
828 (description "gMTP is a simple graphical client for the Media Transfer Protocol
829 (MTP), which allows media files to be transferred to and from many portable
830devices.")
831 (license license:bsd-3)))
832
833(define-public hidapi
834 (package
835 (name "hidapi")
836 (version "0.15.0")
837 (source
838 (origin
839 (method git-fetch)
840 (uri (git-reference
841 (url "https://github.com/libusb/hidapi")
842 (commit (string-append "hidapi-" version))))
843 (file-name (git-file-name name version))
844 (sha256
845 (base32 "0jzzwq2cj7zgjfdjcy50l66v4wfljpkgb6q826xkd49ndr21k8m3"))))
846 (build-system gnu-build-system)
847 (inputs
848 (list libusb eudev))
849 (native-inputs
850 (list autoconf automake libtool pkg-config))
851 (home-page "https://github.com/libusb/hidapi")
852 (synopsis "HID API library")
853 (description
854 "HIDAPI is a library which allows an application to interface with USB and Bluetooth
855HID-Class devices.")
856 ;; HIDAPI can be used under one of three licenses.
857 (license (list license:gpl3
858 license:bsd-3
859 (license:non-copyleft "file://LICENSE-orig.txt")))))
860
861(define-public python-hid
862 (package
863 (name "python-hid")
864 (version "1.0.5")
865 (source (origin
866 (method url-fetch)
867 (uri (pypi-uri "hid" version))
868 (sha256
869 (base32
870 "1s5hvfbmnlmifswr5514f4xxn5rcd429bdcdqzgwkdxrg9zlx58y"))))
871 (build-system pyproject-build-system)
872 (arguments
873 ;; No tests present on the source tree, without this compilation fails
874 ;; because it "requires" the python-nose package, but it is not really
875 ;; necessary.
876 (list #:tests? #f
877 #:phases
878 #~(modify-phases %standard-phases
879 (add-after 'unpack 'add-extra-library-paths
880 (lambda _
881 (let ((libhidapi-hidraw.so
882 #$(file-append hidapi "/lib/libhidapi-hidraw.so"))
883 (libhidapi-libusb.so
884 #$(file-append hidapi "/lib/libhidapi-libusb.so")))
885 (substitute* "hid/__init__.py"
886 (("library_paths = \\(.*$" all)
887 (string-append
888 all
889 " '" libhidapi-hidraw.so "',\n"
890 " '" libhidapi-libusb.so "',\n")))))))))
891 (inputs (list hidapi))
892 (native-inputs (list python-setuptools python-wheel))
893 (home-page "https://github.com/apmorton/pyhidapi")
894 (synopsis "Python @code{ctypes} bindings for HIDAPI library")
895 (description "Python @code{ctypes} bindings for HIDAPI library.")
896 (license license:expat)))
897
898(define-public python-hidapi
899 (package
900 (name "python-hidapi")
901 (version "0.15.0")
902 (source
903 (origin
904 (method url-fetch)
905 (uri (pypi-uri "hidapi" version))
906 (sha256
907 (base32
908 "0483ak6lzpcdkvzr0aqcapn92h08byi0n7j2bxsqhywbprf2dg7c"))
909 (modules '((guix build utils)))
910 (snippet
911 ;; Remove bundled libraries.
912 #~(begin
913 (delete-file-recursively "hidapi")))))
914 (build-system pyproject-build-system)
915 (arguments
916 (list
917 #:test-backend #~'unittest
918 #:configure-flags
919 #~'(("--build-option" . "--with-system-hidapi"))))
920 (inputs
921 (list hidapi libusb eudev))
922 (native-inputs
923 (list pkg-config python-cython python-setuptools))
924 (home-page "https://github.com/trezor/cython-hidapi")
925 (synopsis "Cython interface to hidapi")
926 (description "This package provides a Cython interface to @code{hidapi}.")
927 ;; The library can be used under either of these licenses.
928 (license (list license:gpl3
929 license:bsd-3
930 (license:non-copyleft
931 "https://github.com/trezor/cython-hidapi/blob/master/LICENSE-orig.txt"
932 "You are free to use cython-hidapi code for any purpose.")))))
933
934(define-public hidapitester
935 (package
936 (name "hidapitester")
937 (version "0.6")
938 (source
939 (origin
940 (method git-fetch)
941 (uri (git-reference
942 (url "https://github.com/todbot/hidapitester")
943 (commit (string-append "v" version))))
944 (file-name (git-file-name name version))
945 (sha256
946 (base32 "07cbxr7xi3p6zj0g2a3wb5cg40fw1igadih70b5pdf52i1m81b2s"))))
947 (build-system gnu-build-system)
948 (arguments
949 (list
950 #:test-target "test"
951 #:phases
952 #~(modify-phases %standard-phases
953 (delete 'configure)
954 (replace 'install
955 (lambda _
956 (install-file "hidapitester"
957 (string-append #$output "/bin")))))
958 #:make-flags
959 #~(list (string-append "CC=" #$(cc-for-target))
960 (string-append "GIT_TAG=v" #$version))))
961 (native-inputs (list pkg-config))
962 (inputs (list hidapi eudev))
963 (home-page "https://github.com/todbot/hidapitester")
964 (synopsis "Command-line program to exercise hidapi")
965 (description
966 "The hidapitester program is a simple, low-dependency command-line tool to test
967out every API call in hidapi.")
968 (license license:gpl3)))