gnu: youtube-dl: Update to 2020.09.14.
[jackhill/guix/guix.git] / gnu / packages / protobuf.scm
CommitLineData
14d17788
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
8d63ddda
DP
3;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
4;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
1eeae57b 5;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
599d0190 6;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
d59c84f5 7;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
ba4d96d2 8;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
14d17788
LC
9;;;
10;;; This file is part of GNU Guix.
11;;;
12;;; GNU Guix is free software; you can redistribute it and/or modify it
13;;; under the terms of the GNU General Public License as published by
14;;; the Free Software Foundation; either version 3 of the License, or (at
15;;; your option) any later version.
16;;;
17;;; GNU Guix is distributed in the hope that it will be useful, but
18;;; WITHOUT ANY WARRANTY; without even the implied warranty of
19;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;;; GNU General Public License for more details.
21;;;
22;;; You should have received a copy of the GNU General Public License
23;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
24
25(define-module (gnu packages protobuf)
26 #:use-module (guix packages)
27 #:use-module (guix download)
dc8621a2
TGR
28 #:use-module (guix git-download)
29 #:use-module (guix build-system cmake)
14d17788 30 #:use-module (guix build-system gnu)
8d63ddda 31 #:use-module (guix build-system python)
d78bfd27 32 #:use-module (guix build-system emacs)
d59c84f5 33 #:use-module (guix build-system ruby)
7e685dee 34 #:use-module ((guix licenses) #:prefix license:)
6f1784fa 35 #:use-module (guix utils)
8d63ddda 36 #:use-module (gnu packages compression)
6f1784fa 37 #:use-module (gnu packages check)
8d63ddda 38 #:use-module (gnu packages gcc)
7d9935b4 39 #:use-module (gnu packages libevent)
bfd07331 40 #:use-module (gnu packages pkg-config)
44d10b1f 41 #:use-module (gnu packages python)
6f1784fa 42 #:use-module (gnu packages python-check)
d59c84f5
MC
43 #:use-module (gnu packages python-xyz)
44 #:use-module (gnu packages ruby))
14d17788 45
7d9935b4
TGR
46(define-public fstrm
47 (package
48 (name "fstrm")
49 (version "0.3.2")
50 (source
51 (origin
52 (method url-fetch)
53 (uri (string-append "https://dl.farsightsecurity.com/dist/" name "/"
54 name "-" version ".tar.gz"))
55 (sha256
56 (base32
57 "1i9y8a1712aj80p5a1kcp378bnjrg3s2127q7304hklhmjcrjl1d"))))
58 (build-system gnu-build-system)
59 (native-inputs
60 `(("pkg-config" ,pkg-config)))
61 (inputs
62 `(("libevent" ,libevent)))
63 (home-page "https://github.com/farsightsec/fstrm")
64 (synopsis "Implementation of the Frame Streams data transport protocol")
65 (description
66 "fstrm is an optimised implementation of Frame Streams as a C library and
67several tools built on top of it.
68
69@dfn{Frame Streams} is a light-weight, binary-clean protocol that allows for
70the transport of arbitrarily-encoded data payload sequences with minimal
71framing overhead---just four bytes per data frame. It does not specify an
72encoding format for these data frames and can be used with any data
73serialisation format that produces byte sequences, such as Protocol Buffers,
74XML, JSON, MessagePack, YAML, etc.
75
76Frame Streams can be used either as a streaming transport over a reliable byte
77stream socket (TCP sockets, TLS connections, @code{AF_UNIX} sockets, etc.) for
78data in motion, or as a file format for data at rest.")
7e685dee
TGR
79 (license (list license:asl2.0
80 (license:non-copyleft #f "See libmy/argv*")))))
7d9935b4 81
14d17788
LC
82(define-public protobuf
83 (package
84 (name "protobuf")
7af2b55d 85 (version "3.12.3")
14d17788
LC
86 (source (origin
87 (method url-fetch)
de30a6e0 88 (uri (string-append "https://github.com/google/protobuf/releases/"
dd12d4aa
RW
89 "download/v" version "/protobuf-cpp-"
90 version ".tar.gz"))
14d17788
LC
91 (sha256
92 (base32
7af2b55d 93 "0s29dj8l9j6jk04im3ivcji1x9jm42fwjmwcmli0smz0m337xyaf"))))
14d17788
LC
94 (build-system gnu-build-system)
95 (inputs `(("zlib" ,zlib)))
ffe7eee5
TGR
96 (outputs (list "out"
97 "static")) ; ~12 MiB of .a files
98 (arguments
99 `(#:phases
100 (modify-phases %standard-phases
101 (add-after 'install 'move-static-libraries
102 (lambda* (#:key outputs #:allow-other-keys)
103 ;; Move static libraries to the "static" output.
104 (let* ((out (assoc-ref outputs "out"))
105 (lib (string-append out "/lib"))
106 (static (assoc-ref outputs "static"))
107 (slib (string-append static "/lib")))
108 (mkdir-p slib)
109 (for-each (lambda (file)
110 (install-file file slib)
111 (delete-file file))
112 (find-files lib "\\.a$"))
113 #t))))))
3b0ac795 114 (home-page "https://github.com/google/protobuf")
14d17788
LC
115 (synopsis "Data encoding for remote procedure calls (RPCs)")
116 (description
117 "Protocol Buffers are a way of encoding structured data in an efficient
118yet extensible format. Google uses Protocol Buffers for almost all of its
119internal RPC protocols and file formats.")
7e685dee 120 (license license:bsd-3)))
8d63ddda 121
7373eb83
MB
122;; Tensorflow requires version 3.6 specifically.
123(define-public protobuf-3.6
124 (package/inherit protobuf
c22c803e
RW
125 (version "3.6.1")
126 (source (origin
127 (method url-fetch)
128 (uri (string-append "https://github.com/google/protobuf/releases/"
129 "download/v" version "/protobuf-cpp-"
130 version ".tar.gz"))
131 (sha256
132 (base32
133 "0a955bz59ihrb5wg7dwi12xajdi5pmz4bl0g147rbdwv393jwwxk"))))))
134
7373eb83
MB
135;; The 3.5 series are the last versions that do not require C++ 11.
136(define-public protobuf-3.5
137 (package/inherit
138 protobuf
139 (version "3.5.1")
140 (source (origin
141 (method url-fetch)
142 (uri (string-append "https://github.com/google/protobuf/releases/"
143 "download/v" version "/protobuf-cpp-"
144 version ".tar.gz"))
145 (sha256
146 (base32
147 "14j0427ykjzrd9a66c2mpk0sjcccjlsx6q8ww6hzwb6sha3vm3f2"))))))
148
fa9ac83e
TGR
149;; XXX Remove this old version when no other packages depend on it.
150(define-public protobuf-2
151 (package (inherit protobuf)
152 (version "2.6.1")
153 (source (origin
154 (method url-fetch)
155 (uri (string-append "https://github.com/google/protobuf/releases/"
156 "download/v" version "/protobuf-"
157 version ".tar.bz2"))
158 (sha256
159 (base32
160 "040rcs9fpv4bslhiy43v7dcrzakz4vwwpyqg4jp8bn24sl95ci7f"))))))
161
bfd07331
RW
162(define-public protobuf-c
163 (package
164 (name "protobuf-c")
bd121370 165 (version "1.3.2")
bfd07331
RW
166 (source (origin
167 (method url-fetch)
168 (uri (string-append "https://github.com/protobuf-c/protobuf-c/"
169 "releases/download/v" version
170 "/protobuf-c-" version ".tar.gz"))
171 (sha256
172 (base32
bd121370 173 "0x4ybd9rfd878p2imz0hb8zxfd7l60vbdw7cg84dnysr9kqm3wjk"))))
bfd07331
RW
174 (build-system gnu-build-system)
175 (inputs `(("protobuf" ,protobuf)))
176 (native-inputs `(("pkg-config" ,pkg-config)))
177 (home-page "https://github.com/protobuf-c/protobuf-c")
178 (synopsis "Protocol Buffers implementation in C")
179 (description
180 "This is protobuf-c, a C implementation of the Google Protocol Buffers
181data serialization format. It includes @code{libprotobuf-c}, a pure C library
182that implements protobuf encoding and decoding, and @code{protoc-c}, a code
183generator that converts Protocol Buffer @code{.proto} files to C descriptor
184code.")
7e685dee 185 (license license:bsd-2)))
bfd07331 186
dc8621a2
TGR
187(define-public protozero
188 (package
189 (name "protozero")
599d0190 190 (version "1.6.8")
dc8621a2
TGR
191 (source
192 (origin
193 (method git-fetch)
194 (uri (git-reference
b0e7b699 195 (url "https://github.com/mapbox/protozero")
dc8621a2
TGR
196 (commit (string-append "v" version))))
197 (file-name (git-file-name name version))
198 (sha256
599d0190 199 (base32 "1hfijpfylf1c71wa3mk70gjc88b6k1q7cxb87cwqdflw5q2x8ma6"))))
dc8621a2
TGR
200 (build-system cmake-build-system)
201 (home-page "https://github.com/mapbox/protozero")
202 (synopsis "Minimalistic protocol buffer decoder and encoder in C++")
203 (description "Protozero is a minimalistic protocol buffer decoder and
204encoder in C++. The developer using protozero has to manually translate the
205@file{.proto} description into code.")
206 (license (list
207 license:asl2.0 ; for folly
208 license:bsd-2))))
209
8d63ddda
DP
210(define-public python-protobuf
211 (package
212 (name "python-protobuf")
ba4d96d2 213 (version "3.12.4")
8d63ddda
DP
214 (source
215 (origin
216 (method url-fetch)
217 (uri (pypi-uri "protobuf" version))
218 (sha256
219 (base32
ba4d96d2 220 "0mj6z58aiw532s1mq48m9xdrm3gdyp2vv9cdinfb5wmnfpm5m7n9"))))
8d63ddda 221 (build-system python-build-system)
ba4d96d2
VM
222 (native-inputs
223 `(("python-wheel" ,python-wheel)))
f22efa01 224 (propagated-inputs
8d63ddda
DP
225 `(("python-six" ,python-six)))
226 (home-page "https://github.com/google/protobuf")
227 (synopsis "Protocol buffers is a data interchange format")
228 (description
229 "Protocol buffers are a language-neutral, platform-neutral extensible
230mechanism for serializing structured data.")
7e685dee 231 (license license:bsd-3)))
8d63ddda 232
6f1784fa
LP
233(define-public python-pure-protobuf
234 (package
235 (name "python-pure-protobuf")
236 (version "2.0.0")
237 (source
238 (origin
239 ;; pypi is broken; has no tests
240 (method git-fetch)
241 (uri (git-reference
242 (url "https://github.com/eigenein/protobuf")
243 (commit version)))
244 (file-name (git-file-name name version))
245 (sha256
246 (base32
247 "0lgs99dpfyckz6spib419sl7jpdk2g54pcw0yg59gdcsd1f5zqgz"))))
248 (build-system python-build-system)
249 (native-inputs
250 `(("python-flake8" ,python-flake8)
251 ("python-pytest" ,python-pytest)
252 ("python-pytest-cov" ,python-pytest-cov)
253 ("python-isort" ,python-isort)))
254 (arguments
255 `(#:phases
256 (modify-phases %standard-phases
257 (add-before 'check 'setup-test-env
258 (lambda* (#:key outputs #:allow-other-keys)
259 (let* ((out (assoc-ref outputs "out"))
260 (py3sitedir
261 (string-append out "/lib/python"
262 ,(version-major+minor
263 (package-version python))
264 "/site-packages")))
265 (setenv "PYTHONPATH"
266 (string-append py3sitedir ":"
267 (getenv "PYTHONPATH"))))
268 #t))
269 (replace 'check
270 (lambda _
271 (invoke "pytest" "--cov-report" "term-missing" "--cov"
272 "pure_protobuf")
273 (invoke "flake8" "pure_protobuf" "tests"
274 "--ignore=F541")
275 (invoke "isort" "-rc" "-c" "pure_protobuf" "tests")
276 #t)))))
277 (home-page "https://pypi.org/project/pure-protobuf/")
278 (synopsis "Protobuf implementation using dataclasses")
279 (description
280 "@code{python-pure-protobuf} allows to take advantage of the standard
281dataclasses module to define message types. Protocol buffers are a
282language-neutral, platform-neutral extensible mechanism for serializing
283structured data.")
284 (license license:expat)))
285
8d63ddda 286(define-public python2-protobuf
5c31f4aa 287 (package-with-python2 python-protobuf))
d78bfd27 288
7373eb83
MB
289;; For tensorflow.
290(define-public python-protobuf-3.6
291 (package/inherit python-protobuf
1eeae57b 292 (name "python-protobuf")
7373eb83 293 (version (package-version protobuf-3.6) )
1eeae57b
RW
294 (source
295 (origin
296 (method url-fetch)
297 (uri (pypi-uri "protobuf" version))
298 (sha256
299 (base32
300 "04bqb12smlckzmgkj6vgmpbr3cby0n6726cmz33bqr7kn1vb728l"))))))
301
d78bfd27
CZ
302(define-public emacs-protobuf-mode
303 (package
304 (name "emacs-protobuf-mode")
305 (version (package-version protobuf))
306 (source (package-source protobuf))
307 (build-system emacs-build-system)
308 (arguments
309 `(#:phases
310 (modify-phases %standard-phases
63edbb65 311 (add-before 'add-source-to-load-path 'change-working-directory
d78bfd27
CZ
312 (lambda _ (chdir "editors") #t)))))
313 (home-page "https://github.com/protocolbuffers/protobuf")
314 (synopsis "Protocol buffers major mode for Emacs")
315 (description
316 "This package provides an Emacs major mode for editing Protocol Buffer
317source files.")
318 (license license:bsd-3)))
d59c84f5
MC
319
320(define-public ruby-protobuf
321 (package
322 (name "ruby-protobuf")
323 (version "3.10.3")
324 (source (origin
325 (method git-fetch)
326 (uri (git-reference
b0e7b699 327 (url "https://github.com/ruby-protobuf/protobuf")
d59c84f5
MC
328 (commit (string-append "v" version))))
329 (file-name (git-file-name name version))
330 (sha256
331 (base32
332 "1yzz7jgpp6qip5d6qhzbkf5gqaydfk3z3c1ngccwzp6w6wa75g8a"))))
333 (build-system ruby-build-system)
334 (arguments
335 `(#:phases
336 (modify-phases %standard-phases
337 (add-after 'unpack 'do-not-use-bundler-for-tests
338 (lambda _
339 (substitute* "spec/spec_helper.rb"
340 (("Bundler\\.setup.*") ""))
341 #t))
342 (add-after 'unpack 'relax-version-requirements
343 (lambda _
344 (substitute* ((@@ (guix build ruby-build-system) first-gemspec))
345 (("'rake',.*")
346 "'rake'\n")
347 (("\"rubocop\",.*")
348 "'rubocop'\n")
349 (("\"parser\",.*")
350 "'parser'\n"))
351 #t))
352 (add-after 'unpack 'patch-protoc
353 (lambda* (#:key inputs #:allow-other-keys)
354 (let ((protoc (assoc-ref inputs "protobuf")))
355 (substitute* "lib/protobuf/tasks/compile.rake"
356 (("\"protoc\"")
357 (string-append "\"" protoc "/bin/protoc" "\"")))
358 #t)))
359 (add-after 'unpack 'skip-failing-test
360 ;; See: https://github.com/ruby-protobuf/protobuf/issues/419
361 (lambda _
362 (substitute* "spec/lib/protobuf/rpc/connectors/ping_spec.rb"
363 (("expect\\(::IO\\)\\.to receive\\(:select\\).*" all)
364 (string-append " pending\n" all)))
365 #t))
366 (add-after 'replace-git-ls-files 'replace-more-git-ls-files
367 (lambda _
368 (substitute* ((@@ (guix build ruby-build-system) first-gemspec))
369 (("`git ls-files -- \\{test,spec,features\\}/*`")
370 "`find test spec features -type f | sort`")
371 (("`git ls-files -- bin/*`")
372 "`find bin -type f | sort`"))
373 #t))
374 (replace 'check
375 (lambda _
376 (invoke "rspec"))))))
377 (native-inputs
378 `(("ruby-benchmark-ips" ,ruby-benchmark-ips)
379 ("ruby-ffi-rzmq" ,ruby-ffi-rzmq)
380 ("ruby-parser" ,ruby-parser)
381 ("ruby-pry-byebug" ,ruby-pry-byebug)
382 ("ruby-pry-stack-explorer" ,ruby-pry-stack-explorer)
383 ("ruby-rake" ,ruby-rake)
384 ("ruby-rspec" ,ruby-rspec)
385 ("ruby-rubocop" ,ruby-rubocop)
386 ("ruby-ruby-prof" ,ruby-ruby-prof)
387 ("ruby-simplecov" ,ruby-simplecov)
388 ("ruby-timecop" ,ruby-timecop)
389 ("ruby-varint" ,ruby-varint)
390 ("ruby-yard" ,ruby-yard)))
391 (inputs
392 `(("protobuf" ,protobuf)))
393 (propagated-inputs
394 `(("ruby-activesupport" ,ruby-activesupport)
395 ("ruby-middleware" ,ruby-middleware)
396 ("ruby-thor" ,ruby-thor)))
397 (home-page "https://github.com/ruby-protobuf/protobuf")
398 (synopsis "Implementation of Google's Protocol Buffers in Ruby")
399 (description "Protobuf is an implementation of Google's Protocol Buffers
400in pure Ruby.")
401 (license license:expat)))
77f66f53
MC
402
403;;; This is a modified ruby-protobuf package used by ruby-cucumber-messages
404;;; until https://github.com/ruby-protobuf/protobuf/pull/411 and
405;;; https://github.com/ruby-protobuf/protobuf/pull/415 are merged upstream.
406(define-public ruby-protobuf-cucumber
407 (hidden-package
408 (package
409 (inherit ruby-protobuf)
410 (name "ruby-protobuf-cucumber")
411 (version "3.10.8")
412 (source
413 (origin
414 (method url-fetch)
415 (uri (rubygems-uri "protobuf-cucumber" version))
416 (sha256
417 (base32
418 "1rd6naabhpfb1i5dr6fp5mqwaawsx0mqm73h5ycwkgbm1n2si872")))))))