Merge branch 'master' into core-updates
[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 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 ng0 <ng0@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 databases)
44 #:use-module (gnu packages documentation)
45 #:use-module (gnu packages gcc)
46 #:use-module (gnu packages lua)
47 #:use-module (gnu packages pkg-config)
48 #:use-module (gnu packages python)
49 #:use-module (gnu packages python-xyz)
50 #:use-module (gnu packages perl))
51
52 (define-public cereal
53 (package
54 (name "cereal")
55 (version "1.2.1")
56 (source (origin
57 (method url-fetch)
58 (uri (string-append "https://github.com/USCiLab/cereal/archive/v"
59 version ".tar.gz"))
60 (file-name (string-append name "-" version ".tar.gz"))
61 (sha256
62 (base32
63 "0kj32h3j2128anig0g9gzw82kfyd5xqfkwq6vdyv900jx8i1qckx"))))
64 (build-system cmake-build-system)
65 (arguments
66 `(;; The only included tests are portability tests requiring
67 ;; cross-compilation and boost. Since we are building cereal on more
68 ;; platforms anyway, there is no compelling reason to build the tests.
69 #:tests? #f
70 #:out-of-source? #f
71 #:phases
72 (modify-phases %standard-phases
73 (delete 'configure)
74 (replace 'build
75 (lambda _
76 (substitute* "doc/doxygen.in"
77 (("@CMAKE_CURRENT_SOURCE_DIR@") "."))
78 (invoke "doxygen" "doc/doxygen.in")
79 #t))
80 ;; There is no "install" target, so we have to provide our own
81 ;; "install" phase.
82 (replace 'install
83 (lambda* (#:key outputs #:allow-other-keys)
84 (let* ((out (assoc-ref outputs "out"))
85 (doc (string-append out "/share/cereal/docs"))
86 (include (string-append out "/include/cereal")))
87 (mkdir-p doc)
88 (mkdir-p include)
89 (copy-recursively "include/cereal" include)
90 (copy-recursively "doc/html" doc))
91 #t)))))
92 (native-inputs
93 `(("doxygen" ,doxygen)))
94 (home-page "http://uscilab.github.io/cereal/")
95 (synopsis "C++11 library for serialization")
96 (description
97 "Cereal is a header-only C++11 serialization library. Cereal takes
98 arbitrary data types and reversibly turns them into different representations,
99 such as compact binary encodings, XML, or JSON.")
100 (license license:bsd-3)))
101
102 (define-public msgpack
103 (package
104 (name "msgpack")
105 (version "3.2.0")
106 (source
107 (origin
108 (method url-fetch)
109 (uri
110 (string-append
111 "https://github.com/msgpack/msgpack-c/releases/download/"
112 "cpp-" version "/msgpack-" version ".tar.gz"))
113 (snippet
114 '(let ((p (open-file "msgpack.pc.in" "a")))
115 (display
116 (string-append "Requires: " "zlib" "\n") p)
117 (close-output-port p)
118 #t))
119 (sha256
120 (base32
121 "1zhsap7d9zqdm9h1qnpaw78v1sh3rx2if7gk4dszs5m3cg1jiapv"))))
122 (build-system cmake-build-system)
123 (native-inputs
124 `(("googletest" ,googletest)
125 ("pkg-config" ,pkg-config)))
126 (propagated-inputs
127 `(("zlib" ,zlib))) ;; Msgpack installs two headers (zbuffer.h,
128 ;; zbuffer.hpp) which #include <zlib.h>. However, 'guix gc --references'
129 ;; does not detect a store reference to zlib since these headers are not
130 ;; compiled.
131 (home-page "https://www.msgpack.org")
132 (synopsis "Binary serialization library")
133 (description "Msgpack is a library for C/C++ that implements binary
134 serialization.")
135 (license license:boost1.0)))
136
137 (define-public libmpack
138 (package
139 (name "libmpack")
140 (version "1.0.5")
141 (source
142 (origin
143 (method git-fetch)
144 (uri (git-reference
145 (url "https://github.com/tarruda/libmpack.git")
146 (commit version)))
147 (file-name (git-file-name name version))
148 (sha256
149 (base32 "0rai5djdkjz7bsn025k5489in7r1amagw1pib0z4qns6b52kiar2"))))
150 (build-system gnu-build-system)
151 (arguments
152 `(#:test-target "test"
153 #:make-flags
154 (list "CC=gcc"
155 (string-append "PREFIX=" (assoc-ref %outputs "out")))
156 #:phases
157 (modify-phases %standard-phases
158 (delete 'configure))))
159 (native-inputs
160 `(("libtool" ,libtool)))
161 (home-page "https://github.com/tarruda/libmpack")
162 (synopsis "Small binary serialization library")
163 (description "Libmpack is a small binary serialization and RPC library
164 that implements both the msgpack and msgpack-rpc specifications.")
165 (license license:expat)))
166
167 (define-public lua-libmpack
168 (package (inherit libmpack)
169 (name "lua-libmpack")
170 (version "1.0.8")
171 (source
172 (origin
173 (method git-fetch)
174 (uri (git-reference
175 (url "https://github.com/libmpack/libmpack-lua.git")
176 (commit version)))
177 (file-name (git-file-name name version))
178 (sha256
179 (base32 "1ijvzgq5hvib03w5rghv31wi7byamwg7qdx5pawvhvnflaii8ivw"))))
180 (build-system gnu-build-system)
181 (arguments
182 `(;; FIXME: tests require "busted", which is not yet available in Guix.
183 #:tests? #f
184 #:test-target "test"
185 #:make-flags
186 (let* ((lua-version ,(package-version lua))
187 (lua-major+minor ,(version-major+minor (package-version lua))))
188 (list "CC=gcc"
189 "FETCH=echo" ; don't fetch anything from the web
190 "UNTGZ=echo" ; and don't try to unpack it
191 "USE_SYSTEM_LUA=yes"
192 (string-append "MPACK_LUA_VERSION=" lua-version)
193 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
194 (string-append "PREFIX="
195 (assoc-ref %outputs "out"))
196 (string-append "LUA_CMOD_INSTALLDIR="
197 (assoc-ref %outputs "out")
198 "/lib/lua/" lua-major+minor)))
199 #:phases
200 (modify-phases %standard-phases
201 (delete 'configure)
202 (add-after 'unpack 'unpack-mpack-sources
203 (lambda* (#:key inputs #:allow-other-keys)
204 ;; This is broken because mpack-src is not a file, but all
205 ;; prerequisites are added to the inputs of the gcc invocation.
206 (substitute* "Makefile"
207 (("\\$\\(MPACK\\): mpack-src") "$(MPACK): "))
208 (copy-recursively (assoc-ref inputs "libmpack")
209 "mpack-src")
210 #t)))))
211 (inputs
212 `(("lua" ,lua)))
213 (native-inputs
214 `(("pkg-config" ,pkg-config)
215 ("libmpack" ,(package-source libmpack))))
216 (home-page "https://github.com/libmpack/libmpack-lua")
217 (synopsis "Lua bindings for the libmpack binary serialization library")))
218
219 (define-public lua5.1-libmpack
220 (package (inherit lua-libmpack)
221 (name "lua5.1-libmpack")
222 (arguments
223 (substitute-keyword-arguments (package-arguments lua-libmpack)
224 ((#:make-flags flags)
225 `(let* ((lua-version ,(package-version lua-5.1))
226 (lua-major+minor ,(version-major+minor (package-version lua-5.1))))
227 (list "CC=gcc"
228 "USE_SYSTEM_LUA=yes"
229 (string-append "MPACK_LUA_VERSION=" lua-version)
230 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
231 (string-append "PREFIX="
232 (assoc-ref %outputs "out"))
233 (string-append "LUA_CMOD_INSTALLDIR="
234 (assoc-ref %outputs "out")
235 "/lib/lua/" lua-major+minor))))))
236 (inputs
237 `(("lua" ,lua-5.1)))))
238
239 (define-public lua5.2-libmpack
240 (package (inherit lua-libmpack)
241 (name "lua5.2-libmpack")
242 (arguments
243 (substitute-keyword-arguments (package-arguments lua-libmpack)
244 ((#:make-flags flags)
245 `(let* ((lua-version ,(package-version lua-5.2))
246 (lua-major+minor ,(version-major+minor (package-version lua-5.2))))
247 (list "CC=gcc"
248 "USE_SYSTEM_LUA=yes"
249 (string-append "MPACK_LUA_VERSION=" lua-version)
250 (string-append "MPACK_LUA_VERSION_NOPATCH=" lua-major+minor)
251 (string-append "PREFIX="
252 (assoc-ref %outputs "out"))
253 (string-append "LUA_CMOD_INSTALLDIR="
254 (assoc-ref %outputs "out")
255 "/lib/lua/" lua-major+minor))))))
256 (inputs
257 `(("lua" ,lua-5.2)))))
258
259 (define-public yaml-cpp
260 (package
261 (name "yaml-cpp")
262 (version "0.6.2")
263 (source (origin
264 (method url-fetch)
265 (uri (string-append
266 "https://github.com/jbeder/yaml-cpp/archive/"
267 "yaml-cpp-" version ".tar.gz"))
268 (sha256
269 (base32
270 "01gxn7kc8pzyh4aadjxxzq8cignmbwmm9rfrsmgqfg9w2q75dn74"))))
271 (build-system cmake-build-system)
272 (arguments
273 '(#:configure-flags '("-DBUILD_SHARED_LIBS=ON")
274 #:phases
275 (modify-phases %standard-phases
276 (add-after 'install 'dont-install-gtest-libraries
277 (lambda* (#:key outputs #:allow-other-keys)
278 (let ((out (assoc-ref outputs "out")))
279 (with-directory-excursion
280 (string-append out "/include")
281 (delete-file-recursively "gtest")
282 (delete-file-recursively "gmock"))
283 (with-directory-excursion
284 (string-append out "/lib")
285 (for-each (lambda (file)
286 (delete-file file))
287 '("libgmock.so" "libgmock_main.so"
288 "libgtest.so" "libgtest_main.so"))))
289 #t)))))
290 (native-inputs
291 `(("python" ,python)))
292 (home-page "https://github.com/jbeder/yaml-cpp")
293 (synopsis "YAML parser and emitter in C++")
294 (description "YAML parser and emitter in C++ matching the YAML 1.2 spec.")
295 (license license:bsd-3)))
296
297 (define-public jsoncpp
298 (package
299 (name "jsoncpp")
300 (version "1.9.1")
301 (home-page "https://github.com/open-source-parsers/jsoncpp")
302 (source (origin
303 (method git-fetch)
304 (uri (git-reference (url home-page) (commit version)))
305 (file-name (git-file-name name version))
306 (sha256
307 (base32
308 "00g356iv3kcp0gadj7gbyzf9jn9avvx9vxbxc7c2i5nnry8z72wj"))))
309 (build-system cmake-build-system)
310 (arguments
311 `(#:configure-flags '("-DBUILD_SHARED_LIBS:BOOL=YES")))
312 (synopsis "C++ library for interacting with JSON")
313 (description "JsonCpp is a C++ library that allows manipulating JSON values,
314 including serialization and deserialization to and from strings. It can also
315 preserve existing comment in unserialization/serialization steps, making
316 it a convenient format to store user input files.")
317 (license license:expat)))
318
319 ;; Tensorflow does not build with jsoncpp 1.8.x. It is built with commit
320 ;; 4356d9bba191e1e16ce7a92073cbf3e63564e973, which lies between version 1.7.2
321 ;; and 1.7.3.
322 (define-public jsoncpp-for-tensorflow
323 (package (inherit jsoncpp)
324 (name "jsoncpp")
325 (version "1.7.3")
326 (source (origin
327 (method git-fetch)
328 (uri (git-reference
329 (url "https://github.com/open-source-parsers/jsoncpp.git")
330 (commit version)))
331 (file-name (git-file-name name version))
332 (sha256
333 (base32
334 "1180ln8blrb0mwzpcf78k49hlki6di65q77rsvglf83kfcyh4d7z"))))))
335
336 (define-public capnproto
337 (package
338 (name "capnproto")
339 (version "0.7.0")
340 (source (origin
341 (method url-fetch)
342 (uri (string-append
343 "https://capnproto.org/capnproto-c++-"
344 version ".tar.gz"))
345 (sha256
346 (base32
347 "0hfdnhlbskagzgvby8wy6lrxj53zfzpfqimbhga68c0ji2yw1969"))))
348 (build-system gnu-build-system)
349 (arguments
350 `(#:phases
351 (modify-phases %standard-phases
352 (add-before 'check 'do-not-require-/etc/services
353 (lambda _
354 ;; Workaround for test that tries to resolve port name from
355 ;; /etc/services, which is not present in build environment.
356 (substitute* "src/kj/async-io-test.c++" ((":http") ":80"))
357 #t))
358 (add-before 'check 'use-tmp-for-tempory-files
359 (lambda _
360 ;; Use /tmp for tempory files, as the default /var/tmp directory
361 ;; doesn't exist.
362 (substitute* "src/kj/filesystem-disk-test.c++"
363 (("VAR\\_TMP \"/var/tmp\"")
364 "VAR_TMP \"/tmp\""))
365 #t)))))
366 (home-page "https://capnproto.org")
367 (synopsis "Capability-based RPC and serialization system")
368 (description
369 "Cap'n Proto is a very fast data interchange format and capability-based
370 RPC system. Think JSON, except binary. Or think Protocol Buffers, except faster.")
371 (license license:expat)))
372
373 (define-public libbson
374 (package
375 (name "libbson")
376 (version "1.6.2")
377 (source
378 (origin
379 (method url-fetch)
380 (uri (string-append "https://github.com/mongodb/libbson/releases/"
381 "download/" version "/libbson-" version ".tar.gz"))
382 (sha256
383 (base32
384 "1fj4554msq0rrz14snbj908dzqj46gh7jg9w9j0akn2b7q911m5a"))))
385 (build-system gnu-build-system)
386 (native-inputs `(("perl" ,perl)))
387 (home-page "http://mongoc.org/libbson/current/index.html")
388 (synopsis "C BSON library")
389 (description "Libbson can create and parse BSON documents. It can also
390 convert JSON documents to BSON and the opposite. BSON stands for Binary JSON,
391 it is comparable to protobuf.")
392 (license license:asl2.0)))
393
394 (define-public nlohmann-json-cpp
395 (package
396 (name "nlohmann-json-cpp")
397 (version "3.7.0")
398 (source (origin
399 (method git-fetch)
400 (uri (git-reference
401 (url "https://github.com/nlohmann/json.git")
402 (commit (string-append "v" version))))
403 (file-name (git-file-name name version))
404 (sha256
405 (base32
406 "0v7xih4zjixxxfvkfbs7a8j9qcvpwlsv4vrkbyns3hc7b44nb8ap"))))
407 (build-system cmake-build-system)
408 (native-inputs
409 ;; Integer overflow tests like those from
410 ;; <https://github.com/nlohmann/json/issues/1447> fail when building with
411 ;; gcc@5. Thus, build with a newer GCC.
412 `(("gcc" ,gcc-9)))
413 (arguments
414 '(#:phases (modify-phases %standard-phases
415 (add-before 'build 'unset-path-variables
416 (lambda _
417 (unsetenv "C_INCLUDE_PATH")
418 (unsetenv "CPLUS_INCLUDE_PATH")
419 #t)))))
420 (home-page "https://nlohmann.github.io/json/")
421 (synopsis "JSON library for C++")
422 (description
423 "JSON library for C++ trying to accomplish “Intuitive syntax”,
424 “Trivial integration”, and “Serious testing”.
425 However, “Memory efficiency” and “Speed” have not been primary goals.")
426 (license license:expat)))
427
428 (define-public python-ruamel.yaml
429 (package
430 (name "python-ruamel.yaml")
431 (version "0.15.83")
432 (source
433 (origin
434 (method url-fetch)
435 (uri (pypi-uri "ruamel.yaml" version))
436 (sha256
437 (base32
438 "0p4i8ad28cbbbjja8b9274irkhnphhvhap3aym6yb8xfp1d72kpw"))))
439 (build-system python-build-system)
440 (native-inputs
441 `(("python-pytest" ,python-pytest)))
442 (arguments
443 `(;; TODO: Tests require packaging "ruamel.std.pathlib".
444 #:tests? #f))
445 (home-page "https://bitbucket.org/ruamel/yaml")
446 (synopsis "YAML 1.2 parser/emitter")
447 (description
448 "This package provides YAML parser/emitter that supports roundtrip
449 preservation of comments, seq/map flow style, and map key order. It
450 is a derivative of Kirill Simonov’s PyYAML 3.11. It supports YAML 1.2
451 and has round-trip loaders and dumpers. It supports comments. Block
452 style and key ordering are kept, so you can diff the source.")
453 (license license:expat)))
454
455 (define-public python2-ruamel.yaml
456 (package-with-python2 python-ruamel.yaml))
457
458 (define-public python-cbor
459 (package
460 (name "python-cbor")
461 (version "1.0.0")
462 (source
463 (origin
464 (method url-fetch)
465 (uri (pypi-uri "cbor" version))
466 (sha256
467 (base32
468 "1dmv163cnslyqccrybkxn0c9s1jk1mmafmgxv75iamnz5lk5l8hk"))))
469 (build-system python-build-system)
470 (home-page "https://bitbucket.org/bodhisnarkva/cbor")
471 (synopsis "Implementation of the Concise Binary Object Representation")
472 (description
473 "Python-cbor provides an implementation of the Concise Binary Object
474 Representation (@dfn{CBOR}). CBOR is comparable to JSON, has a superset of
475 JSON's ability, but serializes to a binary format which is smaller and faster
476 to generate and parse. The two primary functions are @code{cbor.loads} and
477 @code{cbor.dumps}.")
478 (license license:asl2.0)))
479
480 (define-public flatbuffers
481 (package
482 (name "flatbuffers")
483 (version "1.10.0")
484 (source
485 (origin
486 (method url-fetch)
487 (uri (string-append "https://github.com/google/flatbuffers/archive/v"
488 version ".tar.gz"))
489 (file-name (string-append name "-" version ".tar.gz"))
490 (sha256
491 (base32
492 "0z4swldxs0s31hnkqdhsbfmc8vx3p7zsvmqaw4l31r2iikdy651p"))))
493 (build-system cmake-build-system)
494 (arguments
495 '(#:build-type "Release"
496 #:configure-flags
497 (list (string-append "-DCMAKE_INSTALL_LIBDIR="
498 (assoc-ref %outputs "out") "/lib"))))
499 (home-page "https://google.github.io/flatbuffers/")
500 (synopsis "Memory-efficient serialization library")
501 (description "FlatBuffers is a cross-platform serialization library for C++,
502 C#, C, Go, Java, JavaScript, PHP, and Python. It was originally created for
503 game development and other performance-critical applications.")
504 (license license:asl2.0)))
505
506 (define-public python-feather-format
507 (package
508 (name "python-feather-format")
509 (version "0.4.0")
510 (source
511 (origin
512 (method url-fetch)
513 (uri (pypi-uri "feather-format" version))
514 (sha256
515 (base32
516 "1adivm5w5ji4qv7hq7942vqlk8l2wgw87bdlsia771z14z3zp857"))))
517 (build-system python-build-system)
518 (propagated-inputs
519 `(("python-pandas" ,python-pandas)
520 ("python-pyarrow" ,python-pyarrow)))
521 (home-page "https://github.com/wesm/feather")
522 (synopsis "Python wrapper to the Feather file format")
523 (description "This package provides a Python wrapper library to the
524 Apache Arrow-based Feather binary columnar serialization data frame format.")
525 (license license:asl2.0)))
526
527 (define-public python2-feather-format
528 (package-with-python2 python-feather-format))