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