gnu: emacs-consult: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / serialization.scm
CommitLineData
0149354d 1;;; GNU Guix --- Functional package management for GNU
42ef29c8 2;;; Copyright © 2015, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
d1ef573d 3;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
f50f4ae4 4;;; Copyright © 2016 David Craven <david@craven.ch>
4d676597 5;;; Copyright © 2016, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
f20cfa06 6;;; Copyright © 2016, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
9d625512 7;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
bf7c3699 8;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
f38d54f0 9;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
3c986a7d 10;;; Copyright © 2017 Nikita <nikita@n0.is>
d7885bbf 11;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
04953dca 12;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
0149354d
RW
13;;;
14;;; This file is part of GNU Guix.
15;;;
16;;; GNU Guix is free software; you can redistribute it and/or modify it
17;;; under the terms of the GNU General Public License as published by
18;;; the Free Software Foundation; either version 3 of the License, or (at
19;;; your option) any later version.
20;;;
21;;; GNU Guix is distributed in the hope that it will be useful, but
22;;; WITHOUT ANY WARRANTY; without even the implied warranty of
23;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;;; GNU General Public License for more details.
25;;;
26;;; You should have received a copy of the GNU General Public License
27;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
28
29(define-module (gnu packages serialization)
30 #:use-module ((guix licenses) #:prefix license:)
31 #:use-module (guix packages)
32 #:use-module (guix download)
42ef29c8 33 #:use-module (guix git-download)
8e664e7e 34 #:use-module (guix utils)
0149354d 35 #:use-module (guix build-system cmake)
d1ef573d 36 #:use-module (guix build-system gnu)
9f1c0e03 37 #:use-module (guix build-system python)
0149354d 38 #:use-module (gnu packages)
d1ef573d 39 #:use-module (gnu packages autotools)
f50f4ae4 40 #:use-module (gnu packages boost)
d1ef573d
LG
41 #:use-module (gnu packages check)
42 #:use-module (gnu packages compression)
b5fc075d 43 #:use-module (gnu packages cmake)
936aa052 44 #:use-module (gnu packages cpp)
8d4f34d6 45 #:use-module (gnu packages databases)
d1ef573d 46 #:use-module (gnu packages documentation)
af632c6b 47 #:use-module (gnu packages gcc)
8e664e7e 48 #:use-module (gnu packages lua)
f47dc8dd 49 #:use-module (gnu packages pkg-config)
9d625512 50 #:use-module (gnu packages python)
312ec128 51 #:use-module (gnu packages python-science)
44d10b1f 52 #:use-module (gnu packages python-xyz)
60a166c6 53 #:use-module (gnu packages perl))
0149354d 54
0e21cf7d
RW
55(define-public avro-cpp-1.9
56 (package
57 (name "avro-cpp")
58 (version "1.9.2")
59 (source (origin
60 (method url-fetch)
61 (uri (string-append
62 "https://archive.apache.org/dist/avro/avro-" version
63 "/avro-src-" version ".tar.gz"))
64 (sha256
65 (base32 "0i3fpm7r72yw397qc8yw9ybzk2mxjkv0yk5hnn00ylc1wbd0np73"))))
66 (build-system cmake-build-system)
67 (arguments
68 `(#:phases
69 (modify-phases %standard-phases
70 (add-after 'unpack 'chdir
71 (lambda _ (chdir "lang/c++"))))))
72 (inputs
73 `(("boost" ,boost)
74 ("snappy" ,snappy)))
75 (home-page "https://avro.apache.org/")
76 (synopsis "Data serialization system")
77 (description "Apache Avro is a data serialization system. Avro provides:
78@enumerate
79@item Rich data structures;
80@item a compact, fast, binary data format;
81@item a container file, to store persistent data;
82@item remote procedure call (RPC); and
83@item simple integration with dynamic languages.
84@end enumerate
85
86Code generation is not required to read or write data files nor to use or
87implement RPC protocols.")
88 (license license:asl2.0)))
89
0149354d
RW
90(define-public cereal
91 (package
92 (name "cereal")
43593f5b 93 (version "1.2.1")
0300085c
TGR
94 (source
95 (origin
96 (method git-fetch)
97 (uri (git-reference
b0e7b699 98 (url "https://github.com/USCiLab/cereal")
0300085c
TGR
99 (commit (string-append "v" version))))
100 (file-name (git-file-name name version))
101 (sha256
102 (base32 "1vxkrsnxkiblzi1z61vfix167c184fy868sgwj2dxxgbgjcq2nrh"))))
0149354d
RW
103 (build-system cmake-build-system)
104 (arguments
105 `(;; The only included tests are portability tests requiring
106 ;; cross-compilation and boost. Since we are building cereal on more
107 ;; platforms anyway, there is no compelling reason to build the tests.
108 #:tests? #f
109 #:out-of-source? #f
110 #:phases
111 (modify-phases %standard-phases
112 (delete 'configure)
113 (replace 'build
114 (lambda _
115 (substitute* "doc/doxygen.in"
116 (("@CMAKE_CURRENT_SOURCE_DIR@") "."))
35929375
TGR
117 (invoke "doxygen" "doc/doxygen.in")
118 #t))
0149354d
RW
119 ;; There is no "install" target, so we have to provide our own
120 ;; "install" phase.
121 (replace 'install
122 (lambda* (#:key outputs #:allow-other-keys)
123 (let* ((out (assoc-ref outputs "out"))
124 (doc (string-append out "/share/cereal/docs"))
125 (include (string-append out "/include/cereal")))
126 (mkdir-p doc)
127 (mkdir-p include)
128 (copy-recursively "include/cereal" include)
129 (copy-recursively "doc/html" doc))
130 #t)))))
131 (native-inputs
132 `(("doxygen" ,doxygen)))
eb38239d 133 (home-page "https://uscilab.github.io/cereal/")
0149354d
RW
134 (synopsis "C++11 library for serialization")
135 (description
136 "Cereal is a header-only C++11 serialization library. Cereal takes
137arbitrary data types and reversibly turns them into different representations,
138such as compact binary encodings, XML, or JSON.")
139 (license license:bsd-3)))
d1ef573d 140
d1ef573d
LG
141(define-public msgpack
142 (package
143 (name "msgpack")
8dac8f11 144 (version "3.2.1")
d1ef573d
LG
145 (source
146 (origin
147 (method url-fetch)
148 (uri
149 (string-append
150 "https://github.com/msgpack/msgpack-c/releases/download/"
151 "cpp-" version "/msgpack-" version ".tar.gz"))
152 (snippet
153 '(let ((p (open-file "msgpack.pc.in" "a")))
6cbee49d
MW
154 (display
155 (string-append "Requires: " "zlib" "\n") p)
156 (close-output-port p)
157 #t))
d1ef573d 158 (sha256
8dac8f11 159 (base32 "1ljqmgscdb0f8w8kx2lnswnisyxchcmijbjbmswkv0g187bvqg23"))))
cdc07e68 160 (build-system cmake-build-system)
d1ef573d 161 (native-inputs
3293fad2 162 `(("googletest" ,googletest-1.8)
d1ef573d
LG
163 ("pkg-config" ,pkg-config)))
164 (propagated-inputs
165 `(("zlib" ,zlib))) ;; Msgpack installs two headers (zbuffer.h,
166 ;; zbuffer.hpp) which #include <zlib.h>. However, 'guix gc --references'
167 ;; does not detect a store reference to zlib since these headers are not
168 ;; compiled.
fe0523d4 169 (home-page "https://www.msgpack.org")
d1ef573d
LG
170 (synopsis "Binary serialization library")
171 (description "Msgpack is a library for C/C++ that implements binary
172serialization.")
173 (license license:boost1.0)))
f50f4ae4 174
c57e5fd0
RW
175(define-public libmpack
176 (package
177 (name "libmpack")
b5236121 178 (version "1.0.5")
d7885bbf
TGR
179 (source
180 (origin
181 (method git-fetch)
182 (uri (git-reference
b0e7b699 183 (url "https://github.com/tarruda/libmpack")
d7885bbf
TGR
184 (commit version)))
185 (file-name (git-file-name name version))
186 (sha256
187 (base32 "0rai5djdkjz7bsn025k5489in7r1amagw1pib0z4qns6b52kiar2"))))
c57e5fd0
RW
188 (build-system gnu-build-system)
189 (arguments
190 `(#:test-target "test"
191 #:make-flags
192 (list "CC=gcc"
193 (string-append "PREFIX=" (assoc-ref %outputs "out")))
194 #:phases
195 (modify-phases %standard-phases
196 (delete 'configure))))
197 (native-inputs
198 `(("libtool" ,libtool)))
199 (home-page "https://github.com/tarruda/libmpack")
200 (synopsis "Small binary serialization library")
201 (description "Libmpack is a small binary serialization and RPC library
202that implements both the msgpack and msgpack-rpc specifications.")
203 (license license:expat)))
204
8e664e7e
RW
205(define-public lua-libmpack
206 (package (inherit libmpack)
207 (name "lua-libmpack")
adad147b 208 (version "1.0.8")
9fde2268
TGR
209 (source
210 (origin
211 (method git-fetch)
212 (uri (git-reference
b0e7b699 213 (url "https://github.com/libmpack/libmpack-lua")
3acd85ac
TGR
214 (commit version)))
215 (file-name (git-file-name name version))
9fde2268 216 (sha256
3acd85ac 217 (base32 "1ijvzgq5hvib03w5rghv31wi7byamwg7qdx5pawvhvnflaii8ivw"))))
8e664e7e
RW
218 (build-system gnu-build-system)
219 (arguments
220 `(;; FIXME: tests require "busted", which is not yet available in Guix.
221 #:tests? #f
222 #:test-target "test"
223 #:make-flags
224 (let* ((lua-version ,(package-version lua))
225 (lua-major+minor ,(version-major+minor (package-version lua))))
226 (list "CC=gcc"
7ec309af
RW
227 "FETCH=echo" ; don't fetch anything from the web
228 "UNTGZ=echo" ; and don't try to unpack it
8e664e7e 229 "USE_SYSTEM_LUA=yes"
7ec309af
RW
230 (string-append "MPACK_LUA_VERSION=" lua-version)
231 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
8e664e7e
RW
232 (string-append "PREFIX="
233 (assoc-ref %outputs "out"))
234 (string-append "LUA_CMOD_INSTALLDIR="
235 (assoc-ref %outputs "out")
7ec309af 236 "/lib/lua/" lua-major+minor)))
8e664e7e
RW
237 #:phases
238 (modify-phases %standard-phases
239 (delete 'configure)
7ec309af
RW
240 (add-after 'unpack 'unpack-mpack-sources
241 (lambda* (#:key inputs #:allow-other-keys)
242 ;; This is broken because mpack-src is not a file, but all
243 ;; prerequisites are added to the inputs of the gcc invocation.
244 (substitute* "Makefile"
245 (("\\$\\(MPACK\\): mpack-src") "$(MPACK): "))
d7885bbf
TGR
246 (copy-recursively (assoc-ref inputs "libmpack")
247 "mpack-src")
248 #t)))))
8e664e7e
RW
249 (inputs
250 `(("lua" ,lua)))
251 (native-inputs
7ec309af
RW
252 `(("pkg-config" ,pkg-config)
253 ("libmpack" ,(package-source libmpack))))
254 (home-page "https://github.com/libmpack/libmpack-lua")
8e664e7e
RW
255 (synopsis "Lua bindings for the libmpack binary serialization library")))
256
01a0a0c4 257(define-public lua5.1-libmpack
1a265842 258 (package/inherit lua-libmpack
01a0a0c4
H
259 (name "lua5.1-libmpack")
260 (arguments
261 (substitute-keyword-arguments (package-arguments lua-libmpack)
262 ((#:make-flags flags)
263 `(let* ((lua-version ,(package-version lua-5.1))
264 (lua-major+minor ,(version-major+minor (package-version lua-5.1))))
265 (list "CC=gcc"
266 "USE_SYSTEM_LUA=yes"
267 (string-append "MPACK_LUA_VERSION=" lua-version)
268 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
269 (string-append "PREFIX="
270 (assoc-ref %outputs "out"))
271 (string-append "LUA_CMOD_INSTALLDIR="
272 (assoc-ref %outputs "out")
273 "/lib/lua/" lua-major+minor))))))
274 (inputs
275 `(("lua" ,lua-5.1)))))
276
369ee96b 277(define-public lua5.2-libmpack
1a265842 278 (package/inherit lua-libmpack
369ee96b
RW
279 (name "lua5.2-libmpack")
280 (arguments
281 (substitute-keyword-arguments (package-arguments lua-libmpack)
282 ((#:make-flags flags)
283 `(let* ((lua-version ,(package-version lua-5.2))
284 (lua-major+minor ,(version-major+minor (package-version lua-5.2))))
285 (list "CC=gcc"
286 "USE_SYSTEM_LUA=yes"
0cdc3343
RW
287 (string-append "MPACK_LUA_VERSION=" lua-version)
288 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
369ee96b
RW
289 (string-append "PREFIX="
290 (assoc-ref %outputs "out"))
291 (string-append "LUA_CMOD_INSTALLDIR="
292 (assoc-ref %outputs "out")
293 "/lib/lua/" lua-major+minor))))))
294 (inputs
295 `(("lua" ,lua-5.2)))))
296
f50f4ae4
DC
297(define-public yaml-cpp
298 (package
299 (name "yaml-cpp")
2acbc174 300 (version "0.6.3")
417b07ab
TGR
301 (source
302 (origin
303 (method git-fetch)
304 (uri (git-reference
b0e7b699 305 (url "https://github.com/jbeder/yaml-cpp")
417b07ab
TGR
306 (commit (string-append "yaml-cpp-" version))))
307 (file-name (git-file-name name version))
308 (sha256
309 (base32 "0ykkxzxcwwiv8l8r697gyqh1nl582krpvi7m7l6b40ijnk4pw30s"))))
f50f4ae4 310 (build-system cmake-build-system)
0577a3fd 311 (arguments
2acbc174 312 '(#:configure-flags '("-DYAML_BUILD_SHARED_LIBS=ON")))
f50f4ae4
DC
313 (native-inputs
314 `(("python" ,python)))
315 (home-page "https://github.com/jbeder/yaml-cpp")
316 (synopsis "YAML parser and emitter in C++")
317 (description "YAML parser and emitter in C++ matching the YAML 1.2 spec.")
318 (license license:bsd-3)))
cd131a76
DC
319
320(define-public jsoncpp
321 (package
322 (name "jsoncpp")
d9580a26 323 (version "1.9.2")
f1818f96 324 (home-page "https://github.com/open-source-parsers/jsoncpp")
cd131a76 325 (source (origin
f1818f96
MB
326 (method git-fetch)
327 (uri (git-reference (url home-page) (commit version)))
328 (file-name (git-file-name name version))
11f87d63 329 (patches (search-patches "jsoncpp-fix-inverted-case.patch"))
cd131a76
DC
330 (sha256
331 (base32
d9580a26 332 "037d1b1qdmn3rksmn1j71j26bv4hkjv7sn7da261k853xb5899sg"))))
cd131a76 333 (build-system cmake-build-system)
996f5ece 334 (arguments
4d676597
MB
335 `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
336 ,@(if (%current-target-system)
337 `("-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF")
338 '()))
b5fc075d
MB
339 ,@(if (%current-target-system)
340 '()
341 `(#:cmake ,cmake-bootstrap))))
cd131a76
DC
342 (synopsis "C++ library for interacting with JSON")
343 (description "JsonCpp is a C++ library that allows manipulating JSON values,
344including serialization and deserialization to and from strings. It can also
345preserve existing comment in unserialization/serialization steps, making
346it a convenient format to store user input files.")
347 (license license:expat)))
557d3328 348
42ef29c8
RW
349;; Tensorflow does not build with jsoncpp 1.8.x. It is built with commit
350;; 4356d9bba191e1e16ce7a92073cbf3e63564e973, which lies between version 1.7.2
351;; and 1.7.3.
352(define-public jsoncpp-for-tensorflow
353 (package (inherit jsoncpp)
354 (name "jsoncpp")
355 (version "1.7.3")
356 (source (origin
357 (method git-fetch)
358 (uri (git-reference
b0e7b699 359 (url "https://github.com/open-source-parsers/jsoncpp")
42ef29c8
RW
360 (commit version)))
361 (file-name (git-file-name name version))
362 (sha256
363 (base32
364 "1180ln8blrb0mwzpcf78k49hlki6di65q77rsvglf83kfcyh4d7z"))))))
365
557d3328
MB
366(define-public capnproto
367 (package
368 (name "capnproto")
56c8b524 369 (version "0.8.0")
557d3328
MB
370 (source (origin
371 (method url-fetch)
372 (uri (string-append
373 "https://capnproto.org/capnproto-c++-"
374 version ".tar.gz"))
375 (sha256
376 (base32
56c8b524 377 "03f1862ljdshg7d0rg3j7jzgm3ip55kzd2y91q7p0racax3hxx6i"))))
557d3328
MB
378 (build-system gnu-build-system)
379 (arguments
380 `(#:phases
381 (modify-phases %standard-phases
382 (add-before 'check 'do-not-require-/etc/services
383 (lambda _
384 ;; Workaround for test that tries to resolve port name from
385 ;; /etc/services, which is not present in build environment.
386 (substitute* "src/kj/async-io-test.c++" ((":http") ":80"))
9c5f4b82
CB
387 #t))
388 (add-before 'check 'use-tmp-for-tempory-files
389 (lambda _
390 ;; Use /tmp for tempory files, as the default /var/tmp directory
391 ;; doesn't exist.
392 (substitute* "src/kj/filesystem-disk-test.c++"
393 (("VAR\\_TMP \"/var/tmp\"")
394 "VAR_TMP \"/tmp\""))
557d3328
MB
395 #t)))))
396 (home-page "https://capnproto.org")
397 (synopsis "Capability-based RPC and serialization system")
398 (description
399 "Cap'n Proto is a very fast data interchange format and capability-based
400RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster.")
401 (license license:expat)))
9d625512
CB
402
403(define-public libbson
404 (package
405 (name "libbson")
406 (version "1.6.2")
407 (source
408 (origin
409 (method url-fetch)
410 (uri (string-append "https://github.com/mongodb/libbson/releases/"
411 "download/" version "/libbson-" version ".tar.gz"))
412 (sha256
413 (base32
414 "1fj4554msq0rrz14snbj908dzqj46gh7jg9w9j0akn2b7q911m5a"))))
415 (build-system gnu-build-system)
416 (native-inputs `(("perl" ,perl)))
417 (home-page "http://mongoc.org/libbson/current/index.html")
418 (synopsis "C BSON library")
419 (description "Libbson can create and parse BSON documents. It can also
420convert JSON documents to BSON and the opposite. BSON stands for Binary JSON,
421it is comparable to protobuf.")
422 (license license:asl2.0)))
bf7c3699 423
f38d54f0
MFM
424(define-public python-ruamel.yaml
425 (package
426 (name "python-ruamel.yaml")
f20cfa06 427 (version "0.15.83")
f38d54f0
MFM
428 (source
429 (origin
430 (method url-fetch)
431 (uri (pypi-uri "ruamel.yaml" version))
432 (sha256
433 (base32
f20cfa06 434 "0p4i8ad28cbbbjja8b9274irkhnphhvhap3aym6yb8xfp1d72kpw"))))
f38d54f0
MFM
435 (build-system python-build-system)
436 (native-inputs
437 `(("python-pytest" ,python-pytest)))
438 (arguments
439 `(;; TODO: Tests require packaging "ruamel.std.pathlib".
440 #:tests? #f))
441 (home-page "https://bitbucket.org/ruamel/yaml")
442 (synopsis "YAML 1.2 parser/emitter")
443 (description
444 "This package provides YAML parser/emitter that supports roundtrip
445preservation of comments, seq/map flow style, and map key order. It
446is a derivative of Kirill Simonov’s PyYAML 3.11. It supports YAML 1.2
447and has round-trip loaders and dumpers. It supports comments. Block
448style and key ordering are kept, so you can diff the source.")
449 (license license:expat)))
450
451(define-public python2-ruamel.yaml
452 (package-with-python2 python-ruamel.yaml))
7ae282fb 453
454(define-public python-cbor
455 (package
456 (name "python-cbor")
457 (version "1.0.0")
458 (source
459 (origin
460 (method url-fetch)
461 (uri (pypi-uri "cbor" version))
462 (sha256
463 (base32
464 "1dmv163cnslyqccrybkxn0c9s1jk1mmafmgxv75iamnz5lk5l8hk"))))
465 (build-system python-build-system)
466 (home-page "https://bitbucket.org/bodhisnarkva/cbor")
467 (synopsis "Implementation of the Concise Binary Object Representation")
468 (description
469 "Python-cbor provides an implementation of the Concise Binary Object
31af847b
TGR
470Representation (@dfn{CBOR}). CBOR is comparable to JSON, has a superset of
471JSON's ability, but serializes to a binary format which is smaller and faster
472to generate and parse. The two primary functions are @code{cbor.loads} and
7ae282fb 473@code{cbor.dumps}.")
474 (license license:asl2.0)))
04953dca
LF
475
476(define-public flatbuffers
477 (package
478 (name "flatbuffers")
429a332b 479 (version "1.10.0")
04953dca
LF
480 (source
481 (origin
482 (method url-fetch)
483 (uri (string-append "https://github.com/google/flatbuffers/archive/v"
484 version ".tar.gz"))
f5d4c46c 485 (file-name (string-append name "-" version ".tar.gz"))
04953dca
LF
486 (sha256
487 (base32
429a332b 488 "0z4swldxs0s31hnkqdhsbfmc8vx3p7zsvmqaw4l31r2iikdy651p"))))
04953dca
LF
489 (build-system cmake-build-system)
490 (arguments
3def739d
TGR
491 '(#:build-type "Release"
492 #:configure-flags
04953dca 493 (list (string-append "-DCMAKE_INSTALL_LIBDIR="
3def739d 494 (assoc-ref %outputs "out") "/lib"))))
04953dca
LF
495 (home-page "https://google.github.io/flatbuffers/")
496 (synopsis "Memory-efficient serialization library")
a8b12397 497 (description "FlatBuffers is a cross-platform serialization library for C++,
04953dca
LF
498C#, C, Go, Java, JavaScript, PHP, and Python. It was originally created for
499game development and other performance-critical applications.")
500 (license license:asl2.0)))
9f1c0e03 501
8d4f34d6
LF
502(define-public python-feather-format
503 (package
504 (name "python-feather-format")
a50628bb 505 (version "0.4.1")
8d4f34d6
LF
506 (source
507 (origin
508 (method url-fetch)
509 (uri (pypi-uri "feather-format" version))
510 (sha256
511 (base32
a50628bb 512 "00w9hwz7sj3fkdjc378r066vdy6lpxmn6vfac3qx956k8lvpxxj5"))))
8d4f34d6
LF
513 (build-system python-build-system)
514 (propagated-inputs
515 `(("python-pandas" ,python-pandas)
516 ("python-pyarrow" ,python-pyarrow)))
517 (home-page "https://github.com/wesm/feather")
518 (synopsis "Python wrapper to the Feather file format")
519 (description "This package provides a Python wrapper library to the
520Apache Arrow-based Feather binary columnar serialization data frame format.")
521 (license license:asl2.0)))