gnu: emacs-svg-icon: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / serialization.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015, 2017, 2019 Ricardo Wurmus <rekado@elephly.net>
3 ;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
4 ;;; Copyright © 2016 David Craven <david@craven.ch>
5 ;;; Copyright © 2016, 2019, 2020 Marius Bakke <mbakke@fastmail.com>
6 ;;; Copyright © 2016, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
7 ;;; Copyright © 2017 Corentin Bocquillon <corentin@nybble.fr>
8 ;;; Copyright © 2017 Gregor Giesen <giesen@zaehlwerk.net>
9 ;;; Copyright © 2017 Frederick M. Muriithi <fredmanglis@gmail.com>
10 ;;; Copyright © 2017 Nikita <nikita@n0.is>
11 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
12 ;;; Copyright © 2018 Joshua Sierles, Nextjournal <joshua@nextjournal.com>
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)
33 #:use-module (guix git-download)
34 #:use-module (guix utils)
35 #:use-module (guix build-system cmake)
36 #:use-module (guix build-system gnu)
37 #:use-module (guix build-system python)
38 #:use-module (gnu packages)
39 #:use-module (gnu packages autotools)
40 #:use-module (gnu packages boost)
41 #:use-module (gnu packages check)
42 #:use-module (gnu packages compression)
43 #:use-module (gnu packages cmake)
44 #:use-module (gnu packages cpp)
45 #:use-module (gnu packages databases)
46 #:use-module (gnu packages documentation)
47 #:use-module (gnu packages gcc)
48 #:use-module (gnu packages lua)
49 #:use-module (gnu packages pkg-config)
50 #:use-module (gnu packages python)
51 #:use-module (gnu packages python-science)
52 #:use-module (gnu packages python-xyz)
53 #:use-module (gnu packages perl))
54
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
86 Code generation is not required to read or write data files nor to use or
87 implement RPC protocols.")
88 (license license:asl2.0)))
89
90 (define-public cereal
91 (package
92 (name "cereal")
93 (version "1.2.1")
94 (source
95 (origin
96 (method git-fetch)
97 (uri (git-reference
98 (url "https://github.com/USCiLab/cereal")
99 (commit (string-append "v" version))))
100 (file-name (git-file-name name version))
101 (sha256
102 (base32 "1vxkrsnxkiblzi1z61vfix167c184fy868sgwj2dxxgbgjcq2nrh"))))
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@") "."))
117 (invoke "doxygen" "doc/doxygen.in")
118 #t))
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)))
133 (home-page "https://uscilab.github.io/cereal/")
134 (synopsis "C++11 library for serialization")
135 (description
136 "Cereal is a header-only C++11 serialization library. Cereal takes
137 arbitrary data types and reversibly turns them into different representations,
138 such as compact binary encodings, XML, or JSON.")
139 (license license:bsd-3)))
140
141 (define-public msgpack
142 (package
143 (name "msgpack")
144 (version "3.2.1")
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")))
154 (display
155 (string-append "Requires: " "zlib" "\n") p)
156 (close-output-port p)
157 #t))
158 (sha256
159 (base32 "1ljqmgscdb0f8w8kx2lnswnisyxchcmijbjbmswkv0g187bvqg23"))))
160 (build-system cmake-build-system)
161 (native-inputs
162 `(("googletest" ,googletest-1.8)
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.
169 (home-page "https://www.msgpack.org")
170 (synopsis "Binary serialization library")
171 (description "Msgpack is a library for C/C++ that implements binary
172 serialization.")
173 (license license:boost1.0)))
174
175 (define-public libmpack
176 (package
177 (name "libmpack")
178 (version "1.0.5")
179 (source
180 (origin
181 (method git-fetch)
182 (uri (git-reference
183 (url "https://github.com/tarruda/libmpack")
184 (commit version)))
185 (file-name (git-file-name name version))
186 (sha256
187 (base32 "0rai5djdkjz7bsn025k5489in7r1amagw1pib0z4qns6b52kiar2"))))
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
202 that implements both the msgpack and msgpack-rpc specifications.")
203 (license license:expat)))
204
205 (define-public lua-libmpack
206 (package (inherit libmpack)
207 (name "lua-libmpack")
208 (version "1.0.8")
209 (source
210 (origin
211 (method git-fetch)
212 (uri (git-reference
213 (url "https://github.com/libmpack/libmpack-lua")
214 (commit version)))
215 (file-name (git-file-name name version))
216 (sha256
217 (base32 "1ijvzgq5hvib03w5rghv31wi7byamwg7qdx5pawvhvnflaii8ivw"))))
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"
227 "FETCH=echo" ; don't fetch anything from the web
228 "UNTGZ=echo" ; and don't try to unpack it
229 "USE_SYSTEM_LUA=yes"
230 (string-append "MPACK_LUA_VERSION=" lua-version)
231 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
232 (string-append "PREFIX="
233 (assoc-ref %outputs "out"))
234 (string-append "LUA_CMOD_INSTALLDIR="
235 (assoc-ref %outputs "out")
236 "/lib/lua/" lua-major+minor)))
237 #:phases
238 (modify-phases %standard-phases
239 (delete 'configure)
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): "))
246 (copy-recursively (assoc-ref inputs "libmpack")
247 "mpack-src")
248 #t)))))
249 (inputs
250 `(("lua" ,lua)))
251 (native-inputs
252 `(("pkg-config" ,pkg-config)
253 ("libmpack" ,(package-source libmpack))))
254 (home-page "https://github.com/libmpack/libmpack-lua")
255 (synopsis "Lua bindings for the libmpack binary serialization library")))
256
257 (define-public lua5.1-libmpack
258 (package/inherit lua-libmpack
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
277 (define-public lua5.2-libmpack
278 (package/inherit lua-libmpack
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"
287 (string-append "MPACK_LUA_VERSION=" lua-version)
288 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
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
297 (define-public yaml-cpp
298 (package
299 (name "yaml-cpp")
300 (version "0.6.3")
301 (source
302 (origin
303 (method git-fetch)
304 (uri (git-reference
305 (url "https://github.com/jbeder/yaml-cpp")
306 (commit (string-append "yaml-cpp-" version))))
307 (file-name (git-file-name name version))
308 (sha256
309 (base32 "0ykkxzxcwwiv8l8r697gyqh1nl582krpvi7m7l6b40ijnk4pw30s"))))
310 (build-system cmake-build-system)
311 (arguments
312 '(#:configure-flags '("-DYAML_BUILD_SHARED_LIBS=ON")))
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)))
319
320 (define-public jsoncpp
321 (package
322 (name "jsoncpp")
323 (version "1.9.2")
324 (home-page "https://github.com/open-source-parsers/jsoncpp")
325 (source (origin
326 (method git-fetch)
327 (uri (git-reference (url home-page) (commit version)))
328 (file-name (git-file-name name version))
329 (patches (search-patches "jsoncpp-fix-inverted-case.patch"))
330 (sha256
331 (base32
332 "037d1b1qdmn3rksmn1j71j26bv4hkjv7sn7da261k853xb5899sg"))))
333 (build-system cmake-build-system)
334 (arguments
335 `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES"
336 ,@(if (%current-target-system)
337 `("-DJSONCPP_WITH_POST_BUILD_UNITTEST=OFF")
338 '()))
339 ,@(if (%current-target-system)
340 '()
341 `(#:cmake ,cmake-bootstrap))))
342 (synopsis "C++ library for interacting with JSON")
343 (description "JsonCpp is a C++ library that allows manipulating JSON values,
344 including serialization and deserialization to and from strings. It can also
345 preserve existing comment in unserialization/serialization steps, making
346 it a convenient format to store user input files.")
347 (license license:expat)))
348
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
359 (url "https://github.com/open-source-parsers/jsoncpp")
360 (commit version)))
361 (file-name (git-file-name name version))
362 (sha256
363 (base32
364 "1180ln8blrb0mwzpcf78k49hlki6di65q77rsvglf83kfcyh4d7z"))))))
365
366 (define-public capnproto
367 (package
368 (name "capnproto")
369 (version "0.8.0")
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
377 "03f1862ljdshg7d0rg3j7jzgm3ip55kzd2y91q7p0racax3hxx6i"))))
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"))
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\""))
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
400 RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster.")
401 (license license:expat)))
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
420 convert JSON documents to BSON and the opposite. BSON stands for Binary JSON,
421 it is comparable to protobuf.")
422 (license license:asl2.0)))
423
424 (define-public python-ruamel.yaml
425 (package
426 (name "python-ruamel.yaml")
427 (version "0.15.83")
428 (source
429 (origin
430 (method url-fetch)
431 (uri (pypi-uri "ruamel.yaml" version))
432 (sha256
433 (base32
434 "0p4i8ad28cbbbjja8b9274irkhnphhvhap3aym6yb8xfp1d72kpw"))))
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
445 preservation of comments, seq/map flow style, and map key order. It
446 is a derivative of Kirill Simonov’s PyYAML 3.11. It supports YAML 1.2
447 and has round-trip loaders and dumpers. It supports comments. Block
448 style 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))
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
470 Representation (@dfn{CBOR}). CBOR is comparable to JSON, has a superset of
471 JSON's ability, but serializes to a binary format which is smaller and faster
472 to generate and parse. The two primary functions are @code{cbor.loads} and
473 @code{cbor.dumps}.")
474 (license license:asl2.0)))
475
476 (define-public flatbuffers
477 (package
478 (name "flatbuffers")
479 (version "1.10.0")
480 (source
481 (origin
482 (method url-fetch)
483 (uri (string-append "https://github.com/google/flatbuffers/archive/v"
484 version ".tar.gz"))
485 (file-name (string-append name "-" version ".tar.gz"))
486 (sha256
487 (base32
488 "0z4swldxs0s31hnkqdhsbfmc8vx3p7zsvmqaw4l31r2iikdy651p"))))
489 (build-system cmake-build-system)
490 (arguments
491 '(#:build-type "Release"
492 #:configure-flags
493 (list (string-append "-DCMAKE_INSTALL_LIBDIR="
494 (assoc-ref %outputs "out") "/lib"))))
495 (home-page "https://google.github.io/flatbuffers/")
496 (synopsis "Memory-efficient serialization library")
497 (description "FlatBuffers is a cross-platform serialization library for C++,
498 C#, C, Go, Java, JavaScript, PHP, and Python. It was originally created for
499 game development and other performance-critical applications.")
500 (license license:asl2.0)))
501
502 (define-public python-feather-format
503 (package
504 (name "python-feather-format")
505 (version "0.4.1")
506 (source
507 (origin
508 (method url-fetch)
509 (uri (pypi-uri "feather-format" version))
510 (sha256
511 (base32
512 "00w9hwz7sj3fkdjc378r066vdy6lpxmn6vfac3qx956k8lvpxxj5"))))
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
520 Apache Arrow-based Feather binary columnar serialization data frame format.")
521 (license license:asl2.0)))