projects/guix·blob ruby-team · refs

1181 lines · 43.6 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015, 2017, 2019, 2020, 2021, 2023, 2024 Ricardo Wurmus <[email protected]>
3;;; Copyright © 2016 Lukas Gradl <[email protected]>
4;;; Copyright © 2016 David Craven <[email protected]>
5;;; Copyright © 2016, 2019, 2020, 2022 Marius Bakke <[email protected]>
6;;; Copyright © 2016, 2018, 2019, 2021 Efraim Flashner <[email protected]>
7;;; Copyright © 2017 Corentin Bocquillon <[email protected]>
8;;; Copyright © 2017 Gregor Giesen <[email protected]>
9;;; Copyright © 2017 Frederick M. Muriithi <[email protected]>
10;;; Copyright © 2017 Nikita <[email protected]>
11;;; Copyright © 2017–2019, 2022 Tobias Geerinckx-Rice <[email protected]>
12;;; Copyright © 2018 Joshua Sierles, Nextjournal <[email protected]>
13;;; Copyright © 2020 Martin Becze <[email protected]>
14;;; Copyright © 2020 Alexandros Theodotou <[email protected]>
15;;; Copyright © 2023 Alexey Abramov <[email protected]>
16;;; Copyright © 2023 Sharlatan Hellseher <[email protected]>
17;;; Copyright © 2023 Vinicius Monego <[email protected]>
18;;; Copyright © 2023-2024, 2026 Maxim Cournoyer <[email protected]>
19;;; Copyright © 2023 Zheng Junjie <[email protected]>
20;;; Copyright © 2024 Paul A. Patience <[email protected]>
21;;; Copyright © 2024 Arun Isaac <[email protected]>
22;;; Copyright © 2024 Wilko Meyer <[email protected]>
23;;; Copyright © 2024, 2025 David Elsing <[email protected]>
24;;; Copyright © 2025-2026 Hennadii Stepanov <[email protected]>
25;;; Copyright © 2025 Brendan Tildesley <[email protected]>
26;;;
27;;; This file is part of GNU Guix.
28;;;
29;;; GNU Guix is free software; you can redistribute it and/or modify it
30;;; under the terms of the GNU General Public License as published by
31;;; the Free Software Foundation; either version 3 of the License, or (at
32;;; your option) any later version.
33;;;
34;;; GNU Guix is distributed in the hope that it will be useful, but
35;;; WITHOUT ANY WARRANTY; without even the implied warranty of
36;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37;;; GNU General Public License for more details.
38;;;
39;;; You should have received a copy of the GNU General Public License
40;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
41
42(define-module (gnu packages serialization)
43 #:use-module ((guix licenses) #:prefix license:)
44 #:use-module (guix packages)
45 #:use-module (guix gexp)
46 #:use-module (guix download)
47 #:use-module (guix hg-download)
48 #:use-module (guix git-download)
49 #:use-module (guix utils)
50 #:use-module (guix build-system cmake)
51 #:use-module (guix build-system copy)
52 #:use-module (guix build-system gnu)
53 #:use-module (guix build-system go)
54 #:use-module (guix build-system meson)
55 #:use-module (guix build-system pyproject)
56 #:use-module (guix build-system qt)
57 #:use-module (gnu packages)
58 #:use-module (gnu packages autotools)
59 #:use-module (gnu packages base)
60 #:use-module (gnu packages bash)
61 #:use-module (gnu packages boost)
62 #:use-module (gnu packages check)
63 #:use-module (gnu packages compression)
64 #:use-module (gnu packages databases)
65 #:use-module (gnu packages documentation)
66 #:use-module (gnu packages gcc)
67 #:use-module (gnu packages llvm)
68 #:use-module (gnu packages lua)
69 #:use-module (gnu packages pkg-config)
70 #:use-module (gnu packages python)
71 #:use-module (gnu packages python-build)
72 #:use-module (gnu packages python-check)
73 #:use-module (gnu packages python-science)
74 #:use-module (gnu packages python-xyz)
75 #:use-module (gnu packages pretty-print)
76 #:use-module (gnu packages qt)
77 #:use-module (gnu packages time))
78
79(define-public avro-cpp
80 (package
81 (name "avro-cpp")
82 (version "1.12.1")
83 (source (origin
84 (method url-fetch)
85 (uri (string-append
86 "mirror://apache/avro/avro-" version
87 "/avro-src-" version ".tar.gz"))
88 (sha256
89 (base32 "0bkd05q0pgir09ngyjrm4hhh9l5828xzrzd65salzw0dhp04g3i6"))))
90 (build-system cmake-build-system)
91 (arguments
92 (list #:phases
93 #~(modify-phases %standard-phases
94 (add-after 'unpack 'chdir
95 (lambda _ (chdir "lang/c++")))
96 (add-after 'chdir 'fix-dependencies
97 (lambda _
98 (substitute* "CMakeLists.txt"
99 (("^FetchContent_MakeAvailable\\(fmt\\)")
100 "find_package(fmt REQUIRED)")))))))
101 (inputs
102 (list boost-1.88 fmt snappy zlib))
103 (home-page "https://avro.apache.org/")
104 (synopsis "Data serialization system")
105 (description "Apache Avro is a data serialization system. Avro provides:
106@enumerate
107@item Rich data structures;
108@item a compact, fast, binary data format;
109@item a container file, to store persistent data;
110@item remote procedure call (RPC); and
111@item simple integration with dynamic languages.
112@end enumerate
113
114Code generation is not required to read or write data files nor to use or
115implement RPC protocols.")
116 (license license:asl2.0)))
117
118(define-public cereal
119 (package
120 (name "cereal")
121 (version "1.3.2")
122 (source
123 (origin
124 (method git-fetch)
125 (uri (git-reference
126 (url "https://github.com/USCiLab/cereal")
127 (commit (string-append "v" version))))
128 (file-name (git-file-name name version))
129 (sha256
130 (base32
131 "02sd90ynya7wg013zwzjr79fsv4bzqgfg9l2mapd4j38rv06gahx"))))
132 (build-system cmake-build-system)
133 (arguments
134 (list
135 #:configure-flags #~'("-DSKIP_PORTABILITY_TEST=ON"
136 ;; Don't bother building the sandbox examples.
137 "-DSKIP_PERFORMANCE_COMPARISON=ON"
138 "-DBUILD_SANDBOX=OFF")
139 #:phases
140 #~(modify-phases %standard-phases
141 (add-after 'install 'install-doc
142 (lambda _
143 (let ((doc (string-append #$output "/share/doc/html")))
144 (invoke "make" "doc")
145 (mkdir-p doc)
146 (copy-recursively "doc/html" doc)))))))
147 (native-inputs
148 (list doxygen))
149 (home-page "https://uscilab.github.io/cereal/")
150 (synopsis "C++11 library for serialization")
151 (description
152 "Cereal is a header-only C++11 serialization library. Cereal takes
153arbitrary data types and reversibly turns them into different representations,
154such as compact binary encodings, XML, or JSON.")
155 ;; Note: Cereal bundles forked versions of rapidxml and rapidjson
156 ;; (see include/cereal/external/), so list their licenses too.
157 (license (list license:bsd-3 ;Cereal itself
158 ;; The bundled RapidXML is dual Boost/Expat (users choice).
159 ;; RapidJSON is Expat licensed, and further bundles a
160 ;; stdint.h with BSD-3.
161 license:boost1.0 license:expat
162 ;; Finally, include/cereal/external/base64.hpp has a
163 ;; home-grown BSD-like license.
164 (license:non-copyleft
165 "file://include/cereal/external/LICENSE")))))
166
167(define-public msgpack-c
168 (package
169 (name "msgpack-c")
170 (version "6.0.0")
171 (source
172 (origin
173 (method url-fetch)
174 (uri
175 (string-append
176 "https://github.com/msgpack/msgpack-c/releases/download/"
177 "c-" version "/" name "-" version ".tar.gz"))
178 (sha256
179 (base32 "1fmf08babfsjq5qkgw034wk2nw6mayxp1qlkm7h55p2jqvigam1n"))
180 (snippet
181 '(let ((p (open-file "msgpack-c.pc.in" "a")))
182 (display "Requires: zlib\n" p)
183 (close-output-port p)))))
184 (build-system cmake-build-system)
185 (arguments (list #:configure-flags #~(list "-DMSGPACK_BUILD_TESTS=ON")))
186 (native-inputs (list googletest))
187 (propagated-inputs (list zlib)) ;zbuffer.h includes zlib.h
188 (home-page "https://www.msgpack.org")
189 (synopsis "Binary serialization library")
190 (description "Msgpack is a library for C that implements binary
191serialization.")
192 (license license:boost1.0)))
193
194(define-public msgpack-cxx
195 (package
196 (inherit msgpack-c)
197 (name "msgpack-cxx")
198 (version "7.0.0")
199 (source
200 (origin
201 (method url-fetch)
202 (uri
203 (string-append
204 "https://github.com/msgpack/msgpack-c/releases/download/"
205 "cpp-" version "/" name "-" version ".tar.gz"))
206 (sha256
207 (base32 "0vqmpdwsrfjavbkhqy38ax1zpcbz3cg98kwxab70543vgspvf13m"))))
208 (build-system cmake-build-system)
209 (propagated-inputs (list boost zlib)) ;included in headers
210 (description "Msgpack is a library for C++ that implements binary
211serialization.")))
212
213(define-public libmpack
214 (package
215 (name "libmpack")
216 (version "1.0.5")
217 (source
218 (origin
219 (method git-fetch)
220 (uri (git-reference
221 (url "https://github.com/tarruda/libmpack")
222 (commit version)))
223 (file-name (git-file-name name version))
224 (sha256
225 (base32 "0rai5djdkjz7bsn025k5489in7r1amagw1pib0z4qns6b52kiar2"))))
226 (build-system gnu-build-system)
227 (arguments
228 `(#:test-target "test"
229 #:make-flags
230 (list "CC=gcc"
231 (string-append "PREFIX=" (assoc-ref %outputs "out")))
232 #:phases
233 (modify-phases %standard-phases
234 (delete 'configure))))
235 (native-inputs
236 (list libtool))
237 (home-page "https://github.com/tarruda/libmpack")
238 (synopsis "Small binary serialization library")
239 (description "Libmpack is a small binary serialization and RPC library
240that implements both the msgpack and msgpack-rpc specifications.")
241 (license license:expat)))
242
243(define-public lua-libmpack
244 (package (inherit libmpack)
245 (name "lua-libmpack")
246 (version "1.0.8")
247 (source
248 (origin
249 (method git-fetch)
250 (uri (git-reference
251 (url "https://github.com/libmpack/libmpack-lua")
252 (commit version)))
253 (file-name (git-file-name name version))
254 (sha256
255 (base32 "1ijvzgq5hvib03w5rghv31wi7byamwg7qdx5pawvhvnflaii8ivw"))))
256 (build-system gnu-build-system)
257 (arguments
258 `(;; FIXME: tests require "busted", which is not yet available in Guix.
259 #:tests? #f
260 #:test-target "test"
261 #:make-flags
262 (let* ((lua-version ,(package-version lua))
263 (lua-major+minor ,(version-major+minor (package-version lua))))
264 (list "CC=gcc"
265 "FETCH=echo" ; don't fetch anything from the web
266 "UNTGZ=echo" ; and don't try to unpack it
267 "USE_SYSTEM_LUA=yes"
268 (string-append "MPACK_LUA_VERSION=" lua-version)
269 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
270 (string-append "PREFIX="
271 (assoc-ref %outputs "out"))
272 (string-append "LUA_CMOD_INSTALLDIR="
273 (assoc-ref %outputs "out")
274 "/lib/lua/" lua-major+minor)))
275 #:phases
276 (modify-phases %standard-phases
277 (delete 'configure)
278 (add-after 'unpack 'unpack-mpack-sources
279 (lambda* (#:key inputs #:allow-other-keys)
280 ;; This is broken because mpack-src is not a file, but all
281 ;; prerequisites are added to the inputs of the gcc invocation.
282 (substitute* "Makefile"
283 (("\\$\\(MPACK\\): mpack-src") "$(MPACK): "))
284 (copy-recursively (assoc-ref inputs "libmpack")
285 "mpack-src")
286 #t)))))
287 (inputs
288 (list lua))
289 (native-inputs
290 `(("pkg-config" ,pkg-config)
291 ("libmpack" ,(package-source libmpack))))
292 (home-page "https://github.com/libmpack/libmpack-lua")
293 (synopsis "Lua bindings for the libmpack binary serialization library")))
294
295(define-public lua5.1-libmpack
296 (package/inherit lua-libmpack
297 (name "lua5.1-libmpack")
298 (arguments
299 (substitute-keyword-arguments arguments
300 ((#:make-flags flags)
301 `(let* ((lua-version ,(package-version lua-5.1))
302 (lua-major+minor ,(version-major+minor (package-version lua-5.1))))
303 (list "CC=gcc"
304 "USE_SYSTEM_LUA=yes"
305 (string-append "MPACK_LUA_VERSION=" lua-version)
306 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
307 (string-append "PREFIX="
308 (assoc-ref %outputs "out"))
309 (string-append "LUA_CMOD_INSTALLDIR="
310 (assoc-ref %outputs "out")
311 "/lib/lua/" lua-major+minor))))))
312 (inputs
313 `(("lua" ,lua-5.1)))))
314
315(define-public lua5.2-libmpack
316 (package/inherit lua-libmpack
317 (name "lua5.2-libmpack")
318 (arguments
319 (substitute-keyword-arguments arguments
320 ((#:make-flags flags)
321 `(let* ((lua-version ,(package-version lua-5.2))
322 (lua-major+minor ,(version-major+minor (package-version lua-5.2))))
323 (list "CC=gcc"
324 "USE_SYSTEM_LUA=yes"
325 (string-append "MPACK_LUA_VERSION=" lua-version)
326 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
327 (string-append "PREFIX="
328 (assoc-ref %outputs "out"))
329 (string-append "LUA_CMOD_INSTALLDIR="
330 (assoc-ref %outputs "out")
331 "/lib/lua/" lua-major+minor))))))
332 (inputs
333 `(("lua" ,lua-5.2)))))
334
335(define-public libcsv
336 (package
337 (name "libcsv")
338 (version "3.0.3")
339 (source (origin
340 (method url-fetch)
341 (uri (string-append "mirror://sourceforge/libcsv/libcsv/libcsv-"
342 version "/libcsv-" version ".tar.gz"))
343 (sha256
344 (base32
345 "1r6pxdxrc3vfil1f9ng1dblm82asdqz6hkz7dj4vkkh3p0f47h6r"))))
346 (build-system gnu-build-system)
347 (home-page "http://sourceforge.net/projects/libcsv/")
348 (synopsis "CSV parser and writer library")
349 (description
350 "This package provides a C library for parsing and writing CSV data.")
351 (license license:lgpl2.1+)))
352
353(define-public qtcsv
354 (package
355 (name "qtcsv")
356 (version "1.7")
357 (source (origin
358 (method git-fetch)
359 (uri (git-reference
360 (url "https://github.com/iamantony/qtcsv")
361 (commit (string-append "v" version))))
362 (file-name (git-file-name name version))
363 (sha256
364 (base32
365 "1c9i93kr7wvpr01i4wixi9mf991nd3k2adg5fy0vxwwlvvc7dgdw"))))
366 (build-system qt-build-system)
367 (arguments
368 (list #:modules '((guix build cmake-build-system)
369 (guix build qt-build-system)
370 ((guix build gnu-build-system) #:prefix gnu:)
371 (guix build utils))
372 #:qtbase qtbase
373 #:phases
374 #~(modify-phases %standard-phases
375 (replace 'check
376 (lambda* (#:rest args)
377 (apply (assoc-ref gnu:%standard-phases 'check)
378 #:test-target "tests" args))))))
379 (home-page "https://github.com/iamantony/qtcsv")
380 (synopsis "Library for reading and writing CSV files in Qt")
381 (description
382 "@code{qtcsv} is a library for reading and writing
383@acronym{CSV,comma-seperated values} files in Qt.")
384 (license license:expat)))
385
386(define-public libscfg
387 (package
388 (name "libscfg")
389 (version "0.2.0")
390 (home-page "https://codeberg.org/emersion/libscfg")
391 (source
392 (origin
393 (method git-fetch)
394 (uri (git-reference
395 (url "https://codeberg.org/emersion/libscfg")
396 (commit (string-append "v" version))))
397 (file-name (git-file-name name version))
398 (sha256
399 (base32 "05csd5923yc6yknyvyr95wkhway65app69a3w5c0mmk61wf42sk5"))))
400 (build-system meson-build-system)
401 (synopsis "Scfg library written in C")
402 (description
403 "This package provides a C library for parsing
404@uref{https://git.sr.ht/~emersion/scfg, scfg}, a simple configuration file
405format with one directive per line.")
406 (license license:expat)))
407
408(define-public libyaml
409 (package
410 (name "libyaml")
411 (version "0.2.5")
412 (source
413 (origin
414 (method url-fetch)
415 (uri (string-append "https://pyyaml.org/download/libyaml/yaml-"
416 version ".tar.gz"))
417 (sha256
418 (base32
419 "1x4fcw13r3lqy8ndydr3ili87wicplw2awbcv6r21qgyfndswhn6"))))
420 (build-system gnu-build-system)
421 (arguments
422 '(#:configure-flags '("--disable-static")))
423 (home-page "https://pyyaml.org/wiki/LibYAML")
424 (synopsis "YAML 1.1 parser and emitter written in C")
425 (description
426 "LibYAML is a YAML 1.1 parser and emitter written in C.")
427 (license license:expat)))
428
429(define-public libyaml+static
430 (package
431 (inherit libyaml)
432 (name "libyaml+static")
433 (arguments
434 '(#:configure-flags '("--enable-static")))))
435
436(define-public libcyaml
437 (package
438 (name "libcyaml")
439 (version "1.3.1")
440 (source
441 (origin
442 (method git-fetch)
443 (uri (git-reference
444 (url "https://github.com/tlsa/libcyaml")
445 (commit (string-append "v" version))))
446 (file-name (git-file-name name version))
447 (patches (search-patches "libcyaml-libyaml-compat.patch"))
448 (sha256
449 (base32 "0gvf3h8r8300wdwfjgxw3nzlj7w14q63m67p8wdm5fvpha017n4y"))))
450 (build-system gnu-build-system)
451 (arguments
452 `(#:test-target "test"
453 #:make-flags
454 (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
455 (string-append "CC=" ,(cc-for-target)))
456 #:phases
457 (modify-phases %standard-phases
458 (delete 'configure)))) ; no configure script
459 (inputs
460 (list libyaml))
461 (native-inputs
462 (list pkg-config))
463 (synopsis "C library for reading and writing YAML")
464 (description
465 "LibCYAML is a C library written in ISO C11 for reading and writing
466structured YAML documents. The fundamental idea behind CYAML is to allow
467applications to construct schemas which describe both the permissible
468structure of the YAML documents to read/write, and the C data structure(s)
469in which the loaded data is arranged in memory.")
470 (home-page "https://github.com/tlsa/libcyaml")
471 (license license:isc)))
472
473(define-public libfyaml
474 (package
475 (name "libfyaml")
476 (version "0.8")
477 (source
478 (origin
479 (method git-fetch)
480 (uri (git-reference
481 (url "https://github.com/pantoniou/libfyaml")
482 (commit (string-append "v" version))))
483 (file-name (git-file-name name version))
484 (sha256
485 (base32 "002g0grddfi5y42lq06zj8266rf7h27wq76sr598ad5pxllx3y3g"))))
486 (build-system gnu-build-system)
487 (native-inputs
488 (list autoconf
489 automake
490 libtool
491 pkg-config))
492 (home-page "https://github.com/pantoniou/libfyaml")
493 (synopsis "YAML version 1.2 and JSON parser and writer")
494 (description "Libfyaml is a YAML parser and emitter, supporting the latest
495YAML spec and passing the full YAML testsuite. It is designed to be very
496efficient, avoiding copies of data, and has no artificial limits like the 1024
497character limit for implicit keys.")
498 (license license:expat)))
499
500(define-public yaml-cpp
501 (package
502 (name "yaml-cpp")
503 (version "0.9.0")
504 (source
505 (origin
506 (method git-fetch)
507 (uri (git-reference
508 (url "https://github.com/jbeder/yaml-cpp")
509 (commit (string-append name "-" version))))
510 (modules '((guix build utils)))
511 (snippet #~(delete-file-recursively "test/googletest-1.13.0"))
512 (file-name (git-file-name name version))
513 (sha256
514 (base32 "0v44chsa2gmc2kknhnyxlmh25fflpknxqc6iyrh1vqiq0qysqlzq"))))
515 (build-system cmake-build-system)
516 (arguments
517 (list #:configure-flags #~(list "-DYAML_BUILD_SHARED_LIBS=ON"
518 "-DYAML_CPP_BUILD_TESTS=ON"
519 "-DYAML_USE_SYSTEM_GTEST=ON")))
520 (native-inputs (list python))
521 (inputs (list googletest-1.8))
522 (home-page "https://github.com/jbeder/yaml-cpp")
523 (synopsis "YAML parser and emitter in C++")
524 (description "YAML parser and emitter in C++ matching the YAML 1.2 spec.")
525 (license license:bsd-3)))
526
527(define-public jsoncpp
528 (package
529 (name "jsoncpp")
530 (version "1.9.6")
531 (home-page "https://github.com/open-source-parsers/jsoncpp")
532 (source (origin
533 (method git-fetch)
534 (uri (git-reference (url home-page) (commit version)))
535 (file-name (git-file-name name version))
536 (sha256
537 (base32
538 "070xg4i52z3yv5b9bw5k95qskw0daivh0njka87mzj0d3zf1qsyy"))))
539 (build-system meson-build-system)
540 (synopsis "C++ library for interacting with JSON")
541 (description "JsonCpp is a C++ library that allows manipulating JSON values,
542including serialization and deserialization to and from strings. It can also
543preserve existing comment in unserialization/serialization steps, making
544it a convenient format to store user input files.")
545 (license license:expat)))
546
547(define-public jsoncpp/pinned
548 (hidden-package
549 ;; Version that rarely changes, depended on by CMake.
550 (package/inherit jsoncpp
551 (version "1.9.6")
552 (source
553 (origin
554 (method git-fetch)
555 (uri (git-reference (url (package-home-page jsoncpp)) (commit version)))
556 (file-name (git-file-name (package-name jsoncpp) version))
557 (sha256
558 (base32
559 "070xg4i52z3yv5b9bw5k95qskw0daivh0njka87mzj0d3zf1qsyy")))))))
560
561(define-public json.sh
562 (let ((commit "0d5e5c77365f63809bf6e77ef44a1f34b0e05840") ;no releases
563 (revision "1"))
564 (package
565 (name "json.sh")
566 (version (git-version "0.0.0" revision commit))
567 (source
568 (origin
569 (method git-fetch)
570 (uri (git-reference
571 (url "https://github.com/dominictarr/JSON.sh")
572 (commit commit)))
573 (file-name (git-file-name name version))
574 (sha256
575 (base32
576 "14lxvp5xbdk0dcwkjbdp098z1108j8z48zaibndh4i731kkcz43i"))))
577 (build-system copy-build-system)
578 (arguments
579 `(#:install-plan '(("JSON.sh" "bin/"))
580 #:phases
581 (modify-phases %standard-phases
582 (add-before 'install 'check
583 (lambda* (#:key tests? #:allow-other-keys)
584 (when tests? (invoke "./all-tests.sh"))
585 #t))
586 (add-after 'install 'wrap-program
587 (lambda* (#:key inputs outputs #:allow-other-keys)
588 (wrap-program (string-append (assoc-ref outputs "out") "/bin/JSON.sh")
589 `("PATH" ":" prefix
590 (,(string-join
591 (map (lambda (in) (string-append (assoc-ref inputs in) "/bin"))
592 '("grep" "sed"))
593 ":"))))
594 #t)))))
595 (inputs
596 (list bash-minimal grep sed))
597 (synopsis "Pipeable JSON parser written in shell")
598 (description
599 "This package provides a JSON parser written in shell, compatible with
600ash, Bash, Dash and Zsh. Pipe JSON to it, and it traverses the JSON objects
601and prints out the path to the current object (as a JSON array) and then the
602object, without whitespace.")
603 (home-page "https://github.com/dominictarr/JSON.sh")
604 (license (list license:expat license:asl2.0))))) ;dual-licensed
605
606(define-public ckdl
607 (package
608 (name "ckdl")
609 (version "1.0")
610 (source
611 (origin
612 (method git-fetch)
613 (uri (git-reference
614 (url "https://github.com/tjol/ckdl")
615 (commit version)))
616 (file-name (git-file-name name version))
617 (sha256
618 (base32 "0dj6kjc7shs3sq6xj3mhpc2wzj4sg3iwg86mk4p9yh8l79kx2ix8"))))
619 (build-system cmake-build-system)
620 (arguments
621 (list #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON"
622 "-DDOWNLOAD_TEST_DATA=OFF")))
623 (home-page "https://ckdl.readthedocs.io/en/latest/")
624 (synopsis "C library for parsing and emitting KDL")
625 (description "@samp{ckdl} is a C library for parsing and emitting KDL.
626This package also provides @samp{kdlpp}, a C++20 wrapper around @samp{ckdl}.")
627 (license license:expat)))
628
629(define-public python-ckdl
630 (package/inherit ckdl
631 (name "python-ckdl")
632 (build-system pyproject-build-system)
633 (arguments
634 (list #:test-backend #~'custom
635 #:test-flags #~(list "bindings/python/tests/ckdl_test.py")))
636 (native-inputs
637 (list python-cython
638 python-scikit-build
639 python-setuptools))
640 (synopsis "Python library for parsing and emitting KDL")))
641
642(define-public capnproto
643 (package
644 (name "capnproto")
645 (version "1.5.0")
646 (source
647 (origin
648 (method git-fetch)
649 (uri (git-reference
650 (url "https://github.com/capnproto/capnproto")
651 (commit (string-append "v" version))))
652 (file-name (git-file-name name version))
653 (sha256
654 (base32 "0p6zb9icy2cjj6y8bj2ai7csghak5aix8wld3jhvddf00diwb7fq"))))
655 (build-system cmake-build-system)
656 (arguments
657 (list
658 #:configure-flags
659 #~(list "-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
660 #:phases
661 #~(modify-phases %standard-phases
662 (add-before 'check 'use-tmp-for-temporary-files
663 (lambda _
664 ;; Use TMPDIR for temporary files, as the default /var/tmp directory
665 ;; doesn't exist.
666 (setenv "TEST_TMPDIR"
667 (getenv "TMPDIR")))))))
668 (home-page "https://capnproto.org")
669 (synopsis "Capability-based RPC and serialization system")
670 (description
671 "Cap'n Proto is a very fast data interchange format and capability-based
672RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster.")
673 (license license:expat)))
674
675(define-public capnproto-clang
676 (package/inherit capnproto
677 (name "capnproto-clang")
678 (arguments
679 (substitute-keyword-arguments arguments
680 ((#:configure-flags flags #~'())
681 #~(cons* "-DCMAKE_C_COMPILER=clang"
682 "-DCMAKE_CXX_COMPILER=clang++"
683 "-DCMAKE_CXX_FLAGS=-std=c++20"
684 #$flags))))
685 (native-inputs
686 (modify-inputs native-inputs
687 (prepend clang
688 lld
689 llvm)))))
690
691(define-public python-msgspec
692 (package
693 (name "python-msgspec")
694 (version "0.20.0")
695 (source
696 (origin
697 (method git-fetch)
698 (uri (git-reference
699 (url "https://github.com/jcrist/msgspec")
700 (commit version)))
701 (file-name (git-file-name name version))
702 (modules '((guix build utils)))
703 (snippet
704 #~(begin
705 ;; Delete autogenerated file, regenerate in a phase.
706 (delete-file "src/msgspec/atof_consts.h")
707 ;; See: <https://github.com/jcrist/msgspec/pull/981>.
708 (substitute* "scripts/generate_atof_consts.py"
709 (("os.path.join\\(repo, " all)
710 (string-append all "\"src\", ")))))
711 (sha256
712 (base32 "1nbaqdyn71zcqj3wj33xw90spm9s93c7qmfkjwbnmmx85ffycq0d"))))
713 (build-system pyproject-build-system)
714 (arguments
715 (list
716 #:test-flags
717 ;; .pytest.toml declares testpaths = ["tests/unit", "tests/typing"]
718 ;; so --ignore=tests/typing will not work.
719 #~(list "tests/unit")
720 #:phases
721 #~(modify-phases %standard-phases
722 (add-after 'unpack 'atof-consts
723 (lambda _
724 (with-directory-excursion "scripts"
725 ;; Regenerate the autogenerated file.
726 (invoke "python" "generate_atof_consts.py")))))))
727 (native-inputs
728 (list python-attrs
729 python-msgpack
730 python-pytest
731 python-setuptools
732 python-setuptools-scm))
733 (propagated-inputs
734 (list python-pyyaml
735 python-tomli
736 python-tomli-w))
737 (home-page "https://jcristharif.com/msgspec/")
738 (synopsis "Fast serialization/validation library")
739 (description "@code{msgspec} is a fast serialization and validation
740library, with builtin support for JSON, MessagePack, YAML, and TOML. It
741includes the following features:
742
743@itemize
744@item High performance encoders/decoders for common protocols.
745@item Support for a wide variety of Python types.
746@item Zero-cost schema validation using familiar Python type annotations.
747@item A speedy Struct type for representing structured data.
748@end itemize")
749 (license license:bsd-3)))
750
751(define-public python-ruamel.yaml
752 (package
753 ;; TODO: Fix package name.
754 (name "python-ruamel.yaml")
755 (version "0.18.14")
756 (source
757 (origin
758 (method url-fetch)
759 (uri (pypi-uri "ruamel.yaml" version))
760 (sha256
761 (base32
762 "1dsj3zcb5p73p2xpimdig45hrcvjgnzyyc37jcaxyr63mrmbf9vj"))))
763 (build-system pyproject-build-system)
764 (arguments (list #:tests? #f)) ;no tests in PyPI archive
765 (native-inputs
766 (list python-setuptools))
767 (propagated-inputs
768 (list python-ruamel.yaml.clib))
769 (home-page "https://sourceforge.net/projects/ruamel-yaml/")
770 (synopsis "YAML 1.2 parser/emitter")
771 (description
772 "This package provides YAML parser/emitter that supports roundtrip
773preservation of comments, seq/map flow style, and map key order. It
774is a derivative of Kirill Simonov’s PyYAML 3.11. It supports YAML 1.2
775and has round-trip loaders and dumpers. It supports comments. Block
776style and key ordering are kept, so you can diff the source.")
777 (license license:expat)))
778
779(define-public python-ruamel.yaml.string
780 (package
781 (name "python-ruamel.yaml.string")
782 (version "0.1.1")
783 (source
784 (origin
785 (method url-fetch)
786 (uri (pypi-uri "ruamel.yaml.string" version))
787 (sha256
788 (base32 "0l23g04mfhaqrrbcxx2id08gpgjf8xc6yxcbsc2c0iax0p6fsyks"))))
789 (build-system pyproject-build-system)
790 (arguments (list #:tests? #f)) ;no tests
791 (propagated-inputs (list python-ruamel.yaml))
792 (native-inputs (list python-setuptools))
793 (home-page "https://sourceforge.net/projects/ruamel-yaml-string/")
794 (synopsis "Dump to string methods for ruamel.yaml")
795 (description
796 "This package provides two dump_to_string/dumps methods that returns YAML
797document as string.")
798 (license license:expat)))
799
800(define-public python-ruamel.yaml-0.16
801 (package
802 (inherit python-ruamel.yaml)
803 (version "0.16.13")
804 (source
805 (origin
806 (method url-fetch)
807 (uri (pypi-uri "ruamel.yaml" version))
808 (sha256
809 (base32
810 "0hm9yg785f46bkrgqknd6fdvmkby9dpzjnm0b63qf0i748acaj5v"))))
811 (arguments
812 `(;; TODO: Tests require packaging "ruamel.std.pathlib".
813 #:tests? #f))))
814
815(define-public python-ruamel.yaml.clib
816 (package
817 ;; TODO: Fix the name
818 (name "python-ruamel.yaml.clib")
819 (version "0.2.12")
820 (source
821 (origin
822 ;; pypi release code has cythonized code without corresponding source.
823 (method hg-fetch)
824 (uri (hg-reference
825 (url "http://hg.code.sf.net/p/ruamel-yaml-clib/code")
826 (changeset version)))
827 (file-name (hg-file-name name version))
828 (sha256
829 (base32
830 "12ixp46706pl911f6i4wmik8x0j9vnxy2cqx65ixbdl9cnvqva2l"))
831 (modules '((guix build utils)))
832 (snippet
833 '(begin
834 (delete-file "_ruamel_yaml.c")))))
835 (build-system pyproject-build-system)
836 (arguments
837 `(#:tests? #f ; This package is split from python-ruamel.yaml and
838 ; depends on modules from it for the test suite.
839 #:phases
840 (modify-phases %standard-phases
841 (delete 'sanity-check) ; Depends on python-ruamel.yaml
842 (add-after 'ensure-no-cythonized-files 'cythonize-code
843 (lambda _
844 (invoke "cython" "_ruamel_yaml.pyx"))))))
845 (native-inputs
846 (list python-cython python-setuptools))
847 (home-page "https://sourceforge.net/p/ruamel-yaml-clib/code/ci/default/tree")
848 (synopsis "C version of reader, parser and emitter for ruamel.yaml")
849 (description
850 "This package provides a C version of the reader, parser and emitter for
851@code{ruamel.yaml} derived from libyaml.")
852 (license license:expat)))
853
854(define-public python-strictyaml
855 (package
856 (name "python-strictyaml")
857 (version "1.7.3")
858 (source
859 (origin
860 (method url-fetch)
861 (uri (pypi-uri "strictyaml" version))
862 (sha256
863 (base32 "01y4hrakk1psdj6ir5k70apqkjjipvja0c40pbfvahmbzjjm9y12"))
864 (modules '((guix build utils)))
865 (snippet
866 #~(begin
867 ;; Unbundle ruamel.
868 (delete-file-recursively "strictyaml/ruamel")))))
869 (build-system pyproject-build-system)
870 (arguments
871 (list
872 ;; XXX: Tests require running Docker and an external test framework,
873 ;; see: <https://github.com/crdoconnor/strictyaml/blob/1.7.3/key.sh>
874 #:tests? #f
875 #:phases
876 #~(modify-phases %standard-phases
877 (add-after 'unpack 'remove-bundled-ruamel
878 (lambda _
879 (substitute* "pyproject.toml"
880 ((", \"strictyaml.ruamel\"")
881 "")
882 (("\"python-dateutil>=2.6.0\"" dateutils)
883 (string-append dateutils ", \"ruamel.yaml\"")))
884 (substitute* "strictyaml/parser.py"
885 (("from strictyaml import ruamel")
886 "import ruamel.yaml"))
887 (substitute* (find-files "." "\\.py$")
888 (("from strictyaml.ruamel")
889 "from ruamel.yaml")))))))
890 (native-inputs
891 (list python-setuptools))
892 (propagated-inputs
893 (list python-dateutil
894 python-ruamel.yaml-0.16))
895 (home-page "https://hitchdev.com/strictyaml/")
896 (synopsis "Strict, typed YAML parser")
897 (description "StrictYAML is a type-safe YAML parser that parses and
898validates a restricted subset of the YAML specification.")
899 (license license:expat)))
900
901(define-public python-cbor
902 (package
903 (name "python-cbor")
904 (version "1.0.0")
905 (source
906 (origin
907 (method url-fetch)
908 (uri (pypi-uri "cbor" version))
909 (sha256
910 (base32
911 "1dmv163cnslyqccrybkxn0c9s1jk1mmafmgxv75iamnz5lk5l8hk"))))
912 (build-system pyproject-build-system)
913 (arguments
914 (list
915 ;; Tests are broken upstrea, see <https://github.com/brianolson/cbor_py/issues/6>.
916 #:tests? #f))
917 (native-inputs
918 (list python-setuptools))
919 (home-page "https://github.com/brianolson/cbor_py")
920 (synopsis "Implementation of the Concise Binary Object Representation")
921 (description
922 "Python-cbor provides an implementation of the Concise Binary Object
923Representation (@dfn{CBOR}). CBOR is comparable to JSON, has a superset of
924JSON's ability, but serializes to a binary format which is smaller and faster
925to generate and parse. The two primary functions are @code{cbor.loads} and
926@code{cbor.dumps}.")
927 (license license:asl2.0)))
928
929(define-public flatbuffers
930 ;; python-flatbuffers inherits version of flatbuffers, make sure to refresh
931 ;; hash after update it here.
932 (package
933 (name "flatbuffers")
934 (version "25.2.10")
935 (source
936 (origin
937 (method git-fetch)
938 (uri (git-reference
939 (url "https://github.com/google/flatbuffers")
940 (commit (string-append "v" version))))
941 (file-name (git-file-name "flatbuffers" version))
942 (sha256
943 (base32 "1wcpaj4k9dwccb752pl8p54pqwajr51sxjym32q2bpm9ny6ib45v"))))
944 (build-system cmake-build-system)
945 (arguments
946 (list
947 #:build-type "Release"
948 #:configure-flags
949 #~(list "-DFLATBUFFERS_BUILD_SHAREDLIB=ON"
950 (string-append "-DCMAKE_INSTALL_LIBDIR=" #$output "/lib"))
951 #:phases
952 #~(modify-phases %standard-phases
953 (add-after 'unpack 'make-writable
954 (lambda _ (for-each make-file-writable (find-files ".")))))))
955 (home-page "https://google.github.io/flatbuffers/")
956 (synopsis "Memory-efficient serialization library")
957 (description
958 "FlatBuffers is a cross-platform serialization library for C++,C#, C, Go,
959Java, JavaScript, PHP, and Python. It was originally created for game
960development and other performance-critical applications.")
961 (license license:asl2.0)))
962
963(define-public flatbuffers-23.5
964 (hidden-package
965 (package
966 (inherit flatbuffers)
967 ;; needed explicitly by onnxruntime and [email protected]
968 (version "23.5.26")
969 (source
970 (origin
971 (method git-fetch)
972 (uri (git-reference
973 (url "https://github.com/google/flatbuffers")
974 (commit (string-append "v" version))))
975 (file-name (git-file-name "flatbuffers" version))
976 (sha256
977 (base32 "0cd12dvkzqdafz46q4302mzgpzbz589zmmiga7bq07f2sqy4vrvv"))))
978 (arguments
979 (substitute-keyword-arguments arguments
980 ((#:configure-flags flags #~'())
981 #~(append #$flags '("-DCMAKE_POSITION_INDEPENDENT_CODE=ON"))))))))
982
983(define-public go-github-com-google-flatbuffers
984 (package/inherit flatbuffers
985 (name "go-github-com-google-flatbuffers")
986 (build-system go-build-system)
987 (arguments
988 (list
989 #:skip-build? #t
990 #:tests? #f
991 #:import-path "github.com/google/flatbuffers"))))
992
993(define-public python-flatbuffers
994 ;; TODO: Build from source the same way as go-github-com-google-flatbuffers.
995 (package
996 (name "python-flatbuffers")
997 (version (package-version flatbuffers))
998 (source
999 (origin
1000 (method url-fetch)
1001 (uri (pypi-uri "flatbuffers" version))
1002 (sha256
1003 (base32 "0vnj03mr5bx421j9djyq0g61ad0k6v45qaflkf6jy9j1g8vm3r4p"))))
1004 (build-system pyproject-build-system)
1005 ;; XXX: No tests on Pypi. Even in the upstream repository, it's unclear
1006 ;; if there is a way to run tests for the python library only.
1007 (arguments (list #:tests? #f))
1008 (native-inputs (list python-setuptools))
1009 (home-page "https://flatbuffers.dev")
1010 (synopsis "FlatBuffers serialization for Python")
1011 (description
1012 "This package provides the @code{FlatBuffers} serialization format for
1013Python.")
1014 (license license:asl2.0)))
1015
1016(define-public python-feather-format
1017 (package
1018 (name "python-feather-format")
1019 (version "0.4.1")
1020 (source
1021 (origin
1022 (method url-fetch)
1023 (uri (pypi-uri "feather-format" version))
1024 (sha256
1025 (base32 "00w9hwz7sj3fkdjc378r066vdy6lpxmn6vfac3qx956k8lvpxxj5"))))
1026 (build-system pyproject-build-system)
1027 (arguments
1028 (list #:tests? #f)) ;no tests in PyPI or Git
1029 (native-inputs
1030 (list python-setuptools))
1031 (propagated-inputs
1032 (list python-pandas
1033 python-pyarrow))
1034 (home-page "https://github.com/wesm/feather")
1035 (synopsis "Python wrapper to the Feather file format")
1036 (description "This package provides a Python wrapper library to the
1037Apache Arrow-based Feather binary columnar serialization data frame format.")
1038 (license license:asl2.0)))
1039
1040(define-public libnop
1041 (let ((commit "35e800d81f28c632956c5a592e3cbe8085ecd430")
1042 (revision "0"))
1043 (package
1044 (name "libnop")
1045 (version (git-version "0" revision commit))
1046 (source (origin
1047 (method git-fetch)
1048 (uri (git-reference
1049 (url "https://github.com/google/libnop")
1050 (commit commit)))
1051 (file-name (git-file-name name version))
1052 (sha256
1053 (base32
1054 "0qqbaljq54qiq0dky9nj47igfcs065ry526jg9a0aafbfl9krpy2"))))
1055 (build-system gnu-build-system)
1056 (arguments
1057 (list
1058 #:test-target "test"
1059 #:phases
1060 #~(modify-phases %standard-phases
1061 (delete 'configure)
1062 (replace 'check
1063 (lambda* (#:key tests? #:allow-other-keys)
1064 (when tests?
1065 (invoke "out/test"))))
1066 (replace 'install
1067 (lambda _
1068 (copy-recursively
1069 "include" (string-append #$output "/include")))))))
1070 (native-inputs (list googletest-1.12))
1071 (home-page "https://github.com/google/libnop")
1072 (synopsis "C++ Native Object Protocols")
1073 (description "@code{libnop} is a header-only library for serializing and
1074deserializing C++ data types without external code generators or runtime
1075support libraries.")
1076 (license license:asl2.0))))
1077
1078(define-public valijson
1079 (package
1080 (name "valijson")
1081 (version "1.0.2")
1082 (source (origin
1083 (method git-fetch)
1084 (uri (git-reference
1085 (url "https://github.com/tristanpenman/valijson")
1086 (commit (string-append "v" version))))
1087 (file-name (git-file-name name version))
1088 (sha256
1089 (base32
1090 "1ai6bj6mxd12mpvf1xwlad2vic5lsqy44adilp17wa7dq275vwf2"))))
1091 (build-system cmake-build-system)
1092 ;; The test suite is disabled as it requires Boost, Qt 5, Poco as well as
1093 ;; other bundled libraries.
1094 (arguments (list #:tests? #f))
1095 (home-page "https://github.com/tristanpenman/valijson")
1096 (synopsis "JSON schema validation C++ header-only library")
1097 (description "Valijson is a header-only JSON Schema validation library for
1098C++11. It provides a simple validation API that allows loading JSON Schemas,
1099and validate documents loaded by one of several supported parser libraries.")
1100 (license license:bsd-2)))
1101
1102(define-public libvarlink
1103 (package
1104 (name "libvarlink")
1105 (version "24")
1106 (source
1107 (origin
1108 (method git-fetch)
1109 (uri (git-reference
1110 (url "https://github.com/varlink/libvarlink")
1111 (commit version)))
1112 (file-name (git-file-name name version))
1113 (sha256
1114 (base32 "098jw9h48p2py6lwxyjrlzvv9zqvqgfsxc4pddfsviab65n9n5gw"))))
1115 (build-system meson-build-system)
1116 (native-inputs
1117 (list python-minimal
1118 glibc-utf8-locales)) ;needed for unit tests
1119 (arguments
1120 (list
1121 #:phases #~(modify-phases %standard-phases
1122 (add-after 'unpack 'patch-/bin/sh
1123 (lambda _
1124 (substitute* "lib/meson.build"
1125 (("/bin/sh")
1126 (which "sh")))))
1127 (add-after 'unpack 'patch-/usr/bin/env
1128 (lambda _
1129 (substitute* "varlink-wrapper.py"
1130 (("/usr/bin/env")
1131 (which "env"))))))))
1132 (home-page "https://varlink.org/")
1133 (synopsis "Varlink C IPC library and command line tool")
1134 (description
1135 "This package provides the C implementation of the varlink
1136interface description protocol and its associated command line tool")
1137 (license license:asl2.0)))
1138
1139(define-public python-rencode
1140 (package
1141 (name "python-rencode")
1142 (version "1.0.8")
1143 (source
1144 (origin
1145 (method git-fetch) ;no tests in PyPI archive
1146 (uri (git-reference
1147 (url "https://github.com/aresch/rencode")
1148 (commit (string-append "v" version))))
1149 (file-name (git-file-name name version))
1150 (sha256
1151 (base32 "1dicbm8gdii2bjp85s2p4pnclf25k9x4b4kaj80y8ddhh87glrlk"))))
1152 (build-system pyproject-build-system)
1153 (arguments
1154 (list
1155 #:phases
1156 #~(modify-phases %standard-phases
1157 (add-after 'unpack 'disable-native-optimization
1158 (lambda _
1159 (substitute* "build.py"
1160 (("^COMPILE_ARGS.*")
1161 "COMPILE_ARGS: list[str] = []\n")))))))
1162 (native-inputs
1163 ;; XXX: Borrow the same hack to make --tune work from python-pyscf to fix
1164 ;; guix build: error: failed to determine which compiler is used
1165 (list (canonical-package gcc)
1166 python-cython
1167 python-pytest
1168 python-poetry-core
1169 python-setuptools))
1170 (home-page "https://github.com/aresch/rencode")
1171 (synopsis "Serialization of heterogeneous data structures")
1172 (description
1173 "The @code{rencode} module is a data structure serialization library,
1174similar to @code{bencode} from the BitTorrent project. For complex,
1175heterogeneous data structures with many small elements, r-encoding stake up
1176significantly less space than b-encodings. This version of rencode is a
1177complete rewrite in Cython to attempt to increase the performance over the
1178pure Python module.")
1179 (license license:bsd-3)
1180 (properties '((tunable? . #t)))))
1181