gnu: kdenlive: Add missing dependencies.
[jackhill/guix/guix.git] / gnu / packages / protobuf.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2014 Ludovic Courtès <ludo@gnu.org>
3 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
4 ;;; Copyright © 2016 Leo Famulari <leo@famulari.name>
5 ;;; Copyright © 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
6 ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
7 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
8 ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
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)
28 #:use-module (guix git-download)
29 #:use-module (guix build-system cmake)
30 #:use-module (guix build-system gnu)
31 #:use-module (guix build-system python)
32 #:use-module (guix build-system emacs)
33 #:use-module (guix build-system ruby)
34 #:use-module ((guix licenses) #:prefix license:)
35 #:use-module (guix utils)
36 #:use-module (gnu packages compression)
37 #:use-module (gnu packages check)
38 #:use-module (gnu packages gcc)
39 #:use-module (gnu packages libevent)
40 #:use-module (gnu packages pkg-config)
41 #:use-module (gnu packages python)
42 #:use-module (gnu packages python-check)
43 #:use-module (gnu packages python-xyz)
44 #:use-module (gnu packages ruby))
45
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
67 several tools built on top of it.
68
69 @dfn{Frame Streams} is a light-weight, binary-clean protocol that allows for
70 the transport of arbitrarily-encoded data payload sequences with minimal
71 framing overhead---just four bytes per data frame. It does not specify an
72 encoding format for these data frames and can be used with any data
73 serialisation format that produces byte sequences, such as Protocol Buffers,
74 XML, JSON, MessagePack, YAML, etc.
75
76 Frame Streams can be used either as a streaming transport over a reliable byte
77 stream socket (TCP sockets, TLS connections, @code{AF_UNIX} sockets, etc.) for
78 data in motion, or as a file format for data at rest.")
79 (license (list license:asl2.0
80 (license:non-copyleft #f "See libmy/argv*")))))
81
82 (define-public protobuf
83 (package
84 (name "protobuf")
85 (version "3.12.3")
86 (source (origin
87 (method url-fetch)
88 (uri (string-append "https://github.com/google/protobuf/releases/"
89 "download/v" version "/protobuf-cpp-"
90 version ".tar.gz"))
91 (sha256
92 (base32
93 "0s29dj8l9j6jk04im3ivcji1x9jm42fwjmwcmli0smz0m337xyaf"))))
94 (build-system gnu-build-system)
95 (inputs `(("zlib" ,zlib)))
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))))))
114 (home-page "https://github.com/google/protobuf")
115 (synopsis "Data encoding for remote procedure calls (RPCs)")
116 (description
117 "Protocol Buffers are a way of encoding structured data in an efficient
118 yet extensible format. Google uses Protocol Buffers for almost all of its
119 internal RPC protocols and file formats.")
120 (license license:bsd-3)))
121
122 ;; Tensorflow requires version 3.6 specifically.
123 (define-public protobuf-3.6
124 (package/inherit protobuf
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
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
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
162 (define-public protobuf-c
163 (package
164 (name "protobuf-c")
165 (version "1.3.2")
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
173 "0x4ybd9rfd878p2imz0hb8zxfd7l60vbdw7cg84dnysr9kqm3wjk"))))
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
181 data serialization format. It includes @code{libprotobuf-c}, a pure C library
182 that implements protobuf encoding and decoding, and @code{protoc-c}, a code
183 generator that converts Protocol Buffer @code{.proto} files to C descriptor
184 code.")
185 (license license:bsd-2)))
186
187 (define-public protozero
188 (package
189 (name "protozero")
190 (version "1.6.8")
191 (source
192 (origin
193 (method git-fetch)
194 (uri (git-reference
195 (url "https://github.com/mapbox/protozero")
196 (commit (string-append "v" version))))
197 (file-name (git-file-name name version))
198 (sha256
199 (base32 "1hfijpfylf1c71wa3mk70gjc88b6k1q7cxb87cwqdflw5q2x8ma6"))))
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
204 encoder 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
210 (define-public python-protobuf
211 (package
212 (name "python-protobuf")
213 (version "3.12.4")
214 (source
215 (origin
216 (method url-fetch)
217 (uri (pypi-uri "protobuf" version))
218 (sha256
219 (base32
220 "0mj6z58aiw532s1mq48m9xdrm3gdyp2vv9cdinfb5wmnfpm5m7n9"))))
221 (build-system python-build-system)
222 (native-inputs
223 `(("python-wheel" ,python-wheel)))
224 (propagated-inputs
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
230 mechanism for serializing structured data.")
231 (license license:bsd-3)))
232
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
281 dataclasses module to define message types. Protocol buffers are a
282 language-neutral, platform-neutral extensible mechanism for serializing
283 structured data.")
284 (license license:expat)))
285
286 (define-public python2-protobuf
287 (package-with-python2 python-protobuf))
288
289 ;; For tensorflow.
290 (define-public python-protobuf-3.6
291 (package/inherit python-protobuf
292 (name "python-protobuf")
293 (version (package-version protobuf-3.6) )
294 (source
295 (origin
296 (method url-fetch)
297 (uri (pypi-uri "protobuf" version))
298 (sha256
299 (base32
300 "04bqb12smlckzmgkj6vgmpbr3cby0n6726cmz33bqr7kn1vb728l"))))))
301
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
311 (add-before 'add-source-to-load-path 'change-working-directory
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
317 source files.")
318 (license license:bsd-3)))
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
327 (url "https://github.com/ruby-protobuf/protobuf")
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
400 in pure Ruby.")
401 (license license:expat)))
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")))))))