Commit | Line | Data |
---|---|---|
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> | |
f8a6ae18 | 5 | ;;; Copyright © 2017, 2018, 2019, 2022 Ricardo Wurmus <rekado@elephly.net> |
599d0190 | 6 | ;;; Copyright © 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr> |
07fdfb9e | 7 | ;;; Copyright © 2020, 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com> |
ba4d96d2 | 8 | ;;; Copyright © 2020 Vinicius Monego <monego@posteo.net> |
a90cf896 | 9 | ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org> |
53bbbfb7 | 10 | ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net> |
14d17788 LC |
11 | ;;; |
12 | ;;; This file is part of GNU Guix. | |
13 | ;;; | |
14 | ;;; GNU Guix is free software; you can redistribute it and/or modify it | |
15 | ;;; under the terms of the GNU General Public License as published by | |
16 | ;;; the Free Software Foundation; either version 3 of the License, or (at | |
17 | ;;; your option) any later version. | |
18 | ;;; | |
19 | ;;; GNU Guix is distributed in the hope that it will be useful, but | |
20 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
21 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
22 | ;;; GNU General Public License for more details. | |
23 | ;;; | |
24 | ;;; You should have received a copy of the GNU General Public License | |
25 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. | |
26 | ||
27 | (define-module (gnu packages protobuf) | |
59d79767 | 28 | #:use-module (guix gexp) |
14d17788 LC |
29 | #:use-module (guix packages) |
30 | #:use-module (guix download) | |
dc8621a2 TGR |
31 | #:use-module (guix git-download) |
32 | #:use-module (guix build-system cmake) | |
14d17788 | 33 | #:use-module (guix build-system gnu) |
8d63ddda | 34 | #:use-module (guix build-system python) |
d78bfd27 | 35 | #:use-module (guix build-system emacs) |
d59c84f5 | 36 | #:use-module (guix build-system ruby) |
7e685dee | 37 | #:use-module ((guix licenses) #:prefix license:) |
6f1784fa | 38 | #:use-module (guix utils) |
5eb16865 | 39 | #:use-module (gnu packages build-tools) |
8d63ddda | 40 | #:use-module (gnu packages compression) |
6f1784fa | 41 | #:use-module (gnu packages check) |
8d63ddda | 42 | #:use-module (gnu packages gcc) |
7d9935b4 | 43 | #:use-module (gnu packages libevent) |
bfd07331 | 44 | #:use-module (gnu packages pkg-config) |
44d10b1f | 45 | #:use-module (gnu packages python) |
13bb41f8 | 46 | #:use-module (gnu packages python-build) |
6f1784fa | 47 | #:use-module (gnu packages python-check) |
d59c84f5 | 48 | #:use-module (gnu packages python-xyz) |
1a7fb20e | 49 | #:use-module (gnu packages rpc) |
d59c84f5 | 50 | #:use-module (gnu packages ruby)) |
14d17788 | 51 | |
7d9935b4 TGR |
52 | (define-public fstrm |
53 | (package | |
54 | (name "fstrm") | |
b167c54e | 55 | (version "0.6.1") |
7d9935b4 TGR |
56 | (source |
57 | (origin | |
58 | (method url-fetch) | |
b167c54e TGR |
59 | (uri (string-append "https://dl.farsightsecurity.com/dist/fstrm/" |
60 | "fstrm-" version ".tar.gz")) | |
7d9935b4 | 61 | (sha256 |
b167c54e | 62 | (base32 "13q9iz5fpp607zvk0i39158fvvjciz4y5k14rly94b9ak0gar95w")))) |
7d9935b4 | 63 | (build-system gnu-build-system) |
59d79767 TGR |
64 | (arguments |
65 | (list #:configure-flags | |
66 | #~(list "--disable-static"))) | |
7d9935b4 | 67 | (native-inputs |
8394619b | 68 | (list pkg-config)) |
7d9935b4 | 69 | (inputs |
8394619b | 70 | (list libevent)) |
7d9935b4 TGR |
71 | (home-page "https://github.com/farsightsec/fstrm") |
72 | (synopsis "Implementation of the Frame Streams data transport protocol") | |
73 | (description | |
74 | "fstrm is an optimised implementation of Frame Streams as a C library and | |
75 | several tools built on top of it. | |
76 | ||
77 | @dfn{Frame Streams} is a light-weight, binary-clean protocol that allows for | |
78 | the transport of arbitrarily-encoded data payload sequences with minimal | |
79 | framing overhead---just four bytes per data frame. It does not specify an | |
80 | encoding format for these data frames and can be used with any data | |
81 | serialisation format that produces byte sequences, such as Protocol Buffers, | |
82 | XML, JSON, MessagePack, YAML, etc. | |
83 | ||
84 | Frame Streams can be used either as a streaming transport over a reliable byte | |
85 | stream socket (TCP sockets, TLS connections, @code{AF_UNIX} sockets, etc.) for | |
86 | data in motion, or as a file format for data at rest.") | |
069d6a3f TGR |
87 | (license (list license:expat ; the combined work |
88 | license:hpnd)))) ; libmy/argv* | |
7d9935b4 | 89 | |
14d17788 LC |
90 | (define-public protobuf |
91 | (package | |
92 | (name "protobuf") | |
0ce685c6 | 93 | (version "3.17.3") |
14d17788 LC |
94 | (source (origin |
95 | (method url-fetch) | |
de30a6e0 | 96 | (uri (string-append "https://github.com/google/protobuf/releases/" |
dd12d4aa RW |
97 | "download/v" version "/protobuf-cpp-" |
98 | version ".tar.gz")) | |
14d17788 LC |
99 | (sha256 |
100 | (base32 | |
0ce685c6 | 101 | "1jzqrklhj9grs6xbddyb5dyxfbgbgbyhl5zig8ml50wb22gwkkji")))) |
14d17788 | 102 | (build-system gnu-build-system) |
8394619b | 103 | (inputs (list zlib)) |
ffe7eee5 TGR |
104 | (outputs (list "out" |
105 | "static")) ; ~12 MiB of .a files | |
106 | (arguments | |
107 | `(#:phases | |
108 | (modify-phases %standard-phases | |
0ce685c6 MC |
109 | (add-after 'unpack 'disable-broken-tests |
110 | ;; The following tests fail on 32 bit architectures such as | |
111 | ;; i686-linux. | |
112 | (lambda _ | |
113 | (let-syntax ((disable-tests | |
114 | (syntax-rules () | |
115 | ((_ file test ...) | |
116 | (substitute* file | |
117 | ((test name) | |
118 | (string-append "DISABLED_" name)) ...))))) | |
119 | ;; See: https://github.com/protocolbuffers/protobuf/issues/8460. | |
120 | (disable-tests "src/google/protobuf/any_test.cc" | |
121 | "TestPackFromSerializationExceedsSizeLimit") | |
122 | ;; See: https://github.com/protocolbuffers/protobuf/issues/8459. | |
123 | (disable-tests "src/google/protobuf/arena_unittest.cc" | |
124 | "SpaceAllocated_and_Used" | |
125 | "BlockSizeSmallerThanAllocation") | |
126 | ;; See: https://github.com/protocolbuffers/protobuf/issues/8082. | |
127 | (disable-tests "src/google/protobuf/io/zero_copy_stream_unittest.cc" | |
128 | "LargeOutput")))) | |
ffe7eee5 TGR |
129 | (add-after 'install 'move-static-libraries |
130 | (lambda* (#:key outputs #:allow-other-keys) | |
131 | ;; Move static libraries to the "static" output. | |
132 | (let* ((out (assoc-ref outputs "out")) | |
133 | (lib (string-append out "/lib")) | |
134 | (static (assoc-ref outputs "static")) | |
135 | (slib (string-append static "/lib"))) | |
136 | (mkdir-p slib) | |
137 | (for-each (lambda (file) | |
138 | (install-file file slib) | |
139 | (delete-file file)) | |
0ce685c6 | 140 | (find-files lib "\\.a$")))))))) |
3b0ac795 | 141 | (home-page "https://github.com/google/protobuf") |
14d17788 LC |
142 | (synopsis "Data encoding for remote procedure calls (RPCs)") |
143 | (description | |
144 | "Protocol Buffers are a way of encoding structured data in an efficient | |
145 | yet extensible format. Google uses Protocol Buffers for almost all of its | |
146 | internal RPC protocols and file formats.") | |
7e685dee | 147 | (license license:bsd-3))) |
8d63ddda | 148 | |
7373eb83 MB |
149 | ;; Tensorflow requires version 3.6 specifically. |
150 | (define-public protobuf-3.6 | |
dbcf2b61 MB |
151 | (package |
152 | (inherit protobuf) | |
c22c803e RW |
153 | (version "3.6.1") |
154 | (source (origin | |
155 | (method url-fetch) | |
156 | (uri (string-append "https://github.com/google/protobuf/releases/" | |
157 | "download/v" version "/protobuf-cpp-" | |
158 | version ".tar.gz")) | |
159 | (sha256 | |
160 | (base32 | |
161 | "0a955bz59ihrb5wg7dwi12xajdi5pmz4bl0g147rbdwv393jwwxk")))))) | |
162 | ||
7373eb83 MB |
163 | ;; The 3.5 series are the last versions that do not require C++ 11. |
164 | (define-public protobuf-3.5 | |
dbcf2b61 MB |
165 | (package |
166 | (inherit protobuf) | |
7373eb83 MB |
167 | (version "3.5.1") |
168 | (source (origin | |
169 | (method url-fetch) | |
170 | (uri (string-append "https://github.com/google/protobuf/releases/" | |
171 | "download/v" version "/protobuf-cpp-" | |
172 | version ".tar.gz")) | |
173 | (sha256 | |
174 | (base32 | |
175 | "14j0427ykjzrd9a66c2mpk0sjcccjlsx6q8ww6hzwb6sha3vm3f2")))))) | |
176 | ||
fa9ac83e TGR |
177 | ;; XXX Remove this old version when no other packages depend on it. |
178 | (define-public protobuf-2 | |
179 | (package (inherit protobuf) | |
180 | (version "2.6.1") | |
181 | (source (origin | |
182 | (method url-fetch) | |
183 | (uri (string-append "https://github.com/google/protobuf/releases/" | |
184 | "download/v" version "/protobuf-" | |
185 | version ".tar.bz2")) | |
186 | (sha256 | |
187 | (base32 | |
07fdfb9e MC |
188 | "040rcs9fpv4bslhiy43v7dcrzakz4vwwpyqg4jp8bn24sl95ci7f")))) |
189 | (arguments (substitute-keyword-arguments (package-arguments protobuf) | |
190 | ((#:phases phases) | |
191 | `(modify-phases ,phases | |
192 | (delete 'disable-broken-tests))))))) | |
fa9ac83e | 193 | |
bfd07331 RW |
194 | (define-public protobuf-c |
195 | (package | |
196 | (name "protobuf-c") | |
e68ae709 | 197 | (version "1.3.3") |
bfd07331 RW |
198 | (source (origin |
199 | (method url-fetch) | |
200 | (uri (string-append "https://github.com/protobuf-c/protobuf-c/" | |
201 | "releases/download/v" version | |
202 | "/protobuf-c-" version ".tar.gz")) | |
203 | (sha256 | |
204 | (base32 | |
e68ae709 | 205 | "0y3yaanq97si7iyld06p8w20m0shpj7sf4xwzbhhvijhxw36d592")))) |
bfd07331 | 206 | (build-system gnu-build-system) |
8394619b LC |
207 | (inputs (list protobuf)) |
208 | (native-inputs (list pkg-config)) | |
bfd07331 RW |
209 | (home-page "https://github.com/protobuf-c/protobuf-c") |
210 | (synopsis "Protocol Buffers implementation in C") | |
211 | (description | |
212 | "This is protobuf-c, a C implementation of the Google Protocol Buffers | |
213 | data serialization format. It includes @code{libprotobuf-c}, a pure C library | |
214 | that implements protobuf encoding and decoding, and @code{protoc-c}, a code | |
215 | generator that converts Protocol Buffer @code{.proto} files to C descriptor | |
216 | code.") | |
7e685dee | 217 | (license license:bsd-2))) |
bfd07331 | 218 | |
dc8621a2 TGR |
219 | (define-public protozero |
220 | (package | |
221 | (name "protozero") | |
a3500a0a | 222 | (version "1.7.1") |
dc8621a2 TGR |
223 | (source |
224 | (origin | |
225 | (method git-fetch) | |
226 | (uri (git-reference | |
b0e7b699 | 227 | (url "https://github.com/mapbox/protozero") |
dc8621a2 TGR |
228 | (commit (string-append "v" version)))) |
229 | (file-name (git-file-name name version)) | |
230 | (sha256 | |
a3500a0a | 231 | (base32 "052cq5mdjjgcsgk612zkqi8k08p3ikl22r59dk6i6fq41dxldja7")))) |
dc8621a2 TGR |
232 | (build-system cmake-build-system) |
233 | (home-page "https://github.com/mapbox/protozero") | |
234 | (synopsis "Minimalistic protocol buffer decoder and encoder in C++") | |
235 | (description "Protozero is a minimalistic protocol buffer decoder and | |
236 | encoder in C++. The developer using protozero has to manually translate the | |
237 | @file{.proto} description into code.") | |
238 | (license (list | |
239 | license:asl2.0 ; for folly | |
240 | license:bsd-2)))) | |
241 | ||
cc3cc72d MC |
242 | (define-public nanopb |
243 | (package | |
244 | (name "nanopb") | |
245 | (version "0.4.6.4") | |
246 | (source (origin | |
247 | (method git-fetch) ;for tests | |
248 | (uri (git-reference | |
249 | (url "https://github.com/nanopb/nanopb") | |
250 | (commit version))) | |
251 | (file-name (git-file-name name version)) | |
252 | (sha256 | |
253 | (base32 | |
254 | "0gb6q4igrjj8jap4p1ijza4y8dkjlingzym3cli1w18f90d7xlh7")))) | |
255 | (build-system cmake-build-system) | |
256 | (arguments | |
257 | (list | |
258 | #:configure-flags #~(list "-DBUILD_SHARED_LIBS=ON" | |
259 | "-DBUILD_STATIC_LIBS=OFF") | |
260 | #:phases | |
261 | #~(modify-phases %standard-phases | |
262 | (replace 'check | |
263 | (lambda* (#:key tests? #:allow-other-keys) | |
264 | (when tests? | |
265 | (with-directory-excursion "../source/tests" | |
266 | (invoke "scons")))))))) | |
267 | (native-inputs (list protobuf python-protobuf python-wrapper scons)) | |
268 | (home-page "https://jpa.kapsi.fi/nanopb/") | |
269 | (synopsis "Small code-size Protocol Buffers implementation in ANSI C") | |
270 | (description "Nanopb is a small code-size Protocol Buffers implementation | |
271 | in ansi C. It is especially suitable for use in microcontrollers, but fits | |
272 | any memory-restricted system.") | |
273 | (license license:zlib))) | |
274 | ||
1a7fb20e MC |
275 | (define-public python-mypy-protobuf |
276 | (package | |
277 | (name "python-mypy-protobuf") | |
278 | (version "3.3.0") | |
279 | (source (origin | |
280 | (method git-fetch) | |
281 | (uri (git-reference | |
282 | (url "https://github.com/nipunn1313/mypy-protobuf") | |
283 | (commit (string-append "v" version)))) | |
284 | (file-name (git-file-name name version)) | |
285 | (sha256 | |
286 | (base32 | |
287 | "0z03h9k68qvnlyhpk0ndwp01bdx77vrjr6mybxq4ldilkkbksklk")))) | |
288 | (build-system python-build-system) | |
289 | (arguments | |
290 | (list | |
291 | #:phases | |
292 | #~(modify-phases %standard-phases | |
293 | ;; XXX: PEP 517 manual build copied from python-isort. | |
294 | (replace 'build | |
295 | (lambda _ | |
296 | ;; ZIP does not support timestamps before 1980. | |
297 | (setenv "SOURCE_DATE_EPOCH" "315532800") | |
298 | (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))) | |
299 | (replace 'install | |
300 | (lambda _ | |
301 | (let ((whl (car (find-files "dist" "\\.whl$")))) | |
302 | (invoke "pip" "--no-cache-dir" "--no-input" | |
303 | "install" "--no-deps" "--prefix" #$output whl)))) | |
304 | (add-before 'check 'generate-protos-for-tests | |
305 | (lambda _ | |
306 | ;; Generate Python sources. | |
307 | (for-each (lambda (proto) | |
308 | (invoke "protoc" | |
309 | "--proto_path=proto" | |
310 | "--experimental_allow_proto3_optional" | |
311 | "--python_out=test/generated" proto)) | |
312 | (find-files "." "\\.proto$")) | |
313 | ;; Generate GRPC protos. | |
314 | (for-each (lambda (proto) | |
315 | (invoke "python" "-m" "grpc_tools.protoc" | |
316 | "--proto_path=proto" | |
317 | "--experimental_allow_proto3_optional" | |
318 | "--grpc_python_out=test/generated" proto)) | |
319 | (find-files "proto/testproto/grpc" "\\.proto$")))) | |
320 | (replace 'check | |
321 | (lambda* (#:key tests? #:allow-other-keys) | |
322 | (setenv "PYTHONPATH" "test/generated") | |
323 | (invoke "pytest" "-vv" "--ignore=test/generated" "test")))))) | |
324 | (native-inputs | |
325 | (list python-grpc-stubs | |
326 | python-grpcio-tools | |
327 | python-pypa-build | |
328 | python-pytest | |
329 | python-typing-extensions-next)) | |
330 | (propagated-inputs | |
331 | (list protobuf | |
332 | python-protobuf | |
333 | python-types-protobuf)) | |
334 | (home-page "https://github.com/nipunn1313/mypy-protobuf") | |
335 | (synopsis "Generate Mypy stub files from protobuf specifications") | |
336 | (description "This Python package provide tools to generate Mypy stubs | |
337 | from protobuf specification files.") | |
338 | (license license:asl2.0))) | |
339 | ||
5eb16865 MC |
340 | (define-public python-nanopb |
341 | (package | |
342 | (inherit nanopb) | |
343 | (name "python-nanopb") | |
344 | (build-system python-build-system) | |
345 | (arguments | |
346 | (list | |
347 | #:tests? #f ;no Python-specific tests | |
348 | #:phases | |
349 | #~(modify-phases %standard-phases | |
350 | (replace 'build | |
351 | (lambda _ | |
352 | (copy-file "extra/poetry/pyproject.toml" "pyproject.toml") | |
353 | (delete-file "build.py") | |
354 | ;; Mimick extra/poetry/poetry_build.sh. | |
355 | (mkdir "nanopb") | |
356 | (copy-recursively "generator" "nanopb/generator") | |
357 | (invoke "touch" "nanopb/__init__.py" | |
358 | "nanopb/generator/__init__.py") | |
359 | (invoke "make" "-C" "nanopb/generator/proto") | |
360 | (invoke "python" "-m" "build" "--wheel" "--no-isolation" "."))) | |
361 | (replace 'install | |
362 | (lambda* (#:key outputs #:allow-other-keys) | |
363 | (let ((whl (car (find-files "dist" "\\.whl$")))) | |
364 | (invoke "pip" "--no-cache-dir" "--no-input" | |
365 | "install" "--no-deps" "--prefix" #$output whl))))))) | |
366 | (native-inputs (list poetry protobuf python-pypa-build)) | |
367 | (propagated-inputs (list python-protobuf)) | |
368 | (synopsis "Small code-size Protocol Buffers implementation in Python"))) | |
369 | ||
8d63ddda DP |
370 | (define-public python-protobuf |
371 | (package | |
372 | (name "python-protobuf") | |
5f8491ea | 373 | (version "3.20.1") |
8d63ddda DP |
374 | (source |
375 | (origin | |
376 | (method url-fetch) | |
377 | (uri (pypi-uri "protobuf" version)) | |
378 | (sha256 | |
379 | (base32 | |
5f8491ea | 380 | "1ja2vpk9nklllmsirmil2s4l7ni9yfqvbvj47zz5xx17s1k1bhxd")))) |
8d63ddda | 381 | (build-system python-build-system) |
8d63ddda DP |
382 | (home-page "https://github.com/google/protobuf") |
383 | (synopsis "Protocol buffers is a data interchange format") | |
384 | (description | |
385 | "Protocol buffers are a language-neutral, platform-neutral extensible | |
386 | mechanism for serializing structured data.") | |
7e685dee | 387 | (license license:bsd-3))) |
8d63ddda | 388 | |
6f1784fa LP |
389 | (define-public python-pure-protobuf |
390 | (package | |
391 | (name "python-pure-protobuf") | |
7a0491ad | 392 | (version "2.0.1") |
6f1784fa LP |
393 | (source |
394 | (origin | |
7a0491ad | 395 | ;; The PyPI tarball is broken: it has no tests. |
6f1784fa LP |
396 | (method git-fetch) |
397 | (uri (git-reference | |
398 | (url "https://github.com/eigenein/protobuf") | |
399 | (commit version))) | |
400 | (file-name (git-file-name name version)) | |
401 | (sha256 | |
7a0491ad | 402 | (base32 "15dp5pvazd0jx4wzzh79080ah7hkpd3axh40al9vhzs2hf3v90hx")))) |
6f1784fa LP |
403 | (build-system python-build-system) |
404 | (native-inputs | |
8394619b | 405 | (list python-flake8 python-pytest python-pytest-cov python-isort)) |
6f1784fa LP |
406 | (arguments |
407 | `(#:phases | |
408 | (modify-phases %standard-phases | |
6f1784fa LP |
409 | (replace 'check |
410 | (lambda _ | |
411 | (invoke "pytest" "--cov-report" "term-missing" "--cov" | |
412 | "pure_protobuf") | |
413 | (invoke "flake8" "pure_protobuf" "tests" | |
414 | "--ignore=F541") | |
6131b838 | 415 | (invoke "isort" "-rc" "-c" "pure_protobuf" "tests")))))) |
6f1784fa LP |
416 | (home-page "https://pypi.org/project/pure-protobuf/") |
417 | (synopsis "Protobuf implementation using dataclasses") | |
418 | (description | |
81fe5863 | 419 | "@code{python-pure-protobuf} takes advantage of the standard |
6f1784fa LP |
420 | dataclasses module to define message types. Protocol buffers are a |
421 | language-neutral, platform-neutral extensible mechanism for serializing | |
422 | structured data.") | |
423 | (license license:expat))) | |
424 | ||
7373eb83 MB |
425 | ;; For tensorflow. |
426 | (define-public python-protobuf-3.6 | |
dbcf2b61 MB |
427 | (package |
428 | (inherit python-protobuf) | |
1eeae57b | 429 | (name "python-protobuf") |
7373eb83 | 430 | (version (package-version protobuf-3.6) ) |
1eeae57b RW |
431 | (source |
432 | (origin | |
433 | (method url-fetch) | |
434 | (uri (pypi-uri "protobuf" version)) | |
435 | (sha256 | |
436 | (base32 | |
57be6ba0 CB |
437 | "04bqb12smlckzmgkj6vgmpbr3cby0n6726cmz33bqr7kn1vb728l")))) |
438 | (inputs | |
439 | (cons python-six | |
440 | (package-inputs python-protobuf))))) | |
1eeae57b | 441 | |
f8a6ae18 RW |
442 | (define-public python-proto-plus |
443 | (package | |
444 | (name "python-proto-plus") | |
445 | (version "1.20.3") | |
446 | (source | |
447 | (origin | |
448 | (method url-fetch) | |
449 | (uri (pypi-uri "proto-plus" version)) | |
450 | (sha256 | |
451 | (base32 "1raad9qnmfva94nm33k40bcwrckgljbfky5pdwh4xhg6r5dj52zj")))) | |
452 | (build-system python-build-system) | |
453 | (propagated-inputs (list python-protobuf)) | |
454 | (home-page "https://github.com/googleapis/proto-plus-python.git") | |
455 | (synopsis "Pythonic protocol buffers") | |
456 | (description "This is a wrapper around protocol buffers. Protocol buffers | |
457 | is a specification format for APIs, such as those inside Google. This library | |
458 | provides protocol buffer message classes and objects that largely behave like | |
459 | native Python types.") | |
460 | (license license:asl2.0))) | |
461 | ||
d78bfd27 CZ |
462 | (define-public emacs-protobuf-mode |
463 | (package | |
464 | (name "emacs-protobuf-mode") | |
465 | (version (package-version protobuf)) | |
466 | (source (package-source protobuf)) | |
467 | (build-system emacs-build-system) | |
468 | (arguments | |
469 | `(#:phases | |
470 | (modify-phases %standard-phases | |
6b83da96 | 471 | (add-before 'expand-load-path 'change-working-directory |
d78bfd27 CZ |
472 | (lambda _ (chdir "editors") #t))))) |
473 | (home-page "https://github.com/protocolbuffers/protobuf") | |
474 | (synopsis "Protocol buffers major mode for Emacs") | |
475 | (description | |
476 | "This package provides an Emacs major mode for editing Protocol Buffer | |
477 | source files.") | |
478 | (license license:bsd-3))) | |
d59c84f5 MC |
479 | |
480 | (define-public ruby-protobuf | |
481 | (package | |
482 | (name "ruby-protobuf") | |
483 | (version "3.10.3") | |
484 | (source (origin | |
485 | (method git-fetch) | |
486 | (uri (git-reference | |
b0e7b699 | 487 | (url "https://github.com/ruby-protobuf/protobuf") |
d59c84f5 MC |
488 | (commit (string-append "v" version)))) |
489 | (file-name (git-file-name name version)) | |
490 | (sha256 | |
491 | (base32 | |
492 | "1yzz7jgpp6qip5d6qhzbkf5gqaydfk3z3c1ngccwzp6w6wa75g8a")))) | |
493 | (build-system ruby-build-system) | |
494 | (arguments | |
495 | `(#:phases | |
496 | (modify-phases %standard-phases | |
497 | (add-after 'unpack 'do-not-use-bundler-for-tests | |
498 | (lambda _ | |
499 | (substitute* "spec/spec_helper.rb" | |
500 | (("Bundler\\.setup.*") "")) | |
501 | #t)) | |
502 | (add-after 'unpack 'relax-version-requirements | |
503 | (lambda _ | |
504 | (substitute* ((@@ (guix build ruby-build-system) first-gemspec)) | |
505 | (("'rake',.*") | |
506 | "'rake'\n") | |
507 | (("\"rubocop\",.*") | |
508 | "'rubocop'\n") | |
509 | (("\"parser\",.*") | |
510 | "'parser'\n")) | |
511 | #t)) | |
512 | (add-after 'unpack 'patch-protoc | |
513 | (lambda* (#:key inputs #:allow-other-keys) | |
514 | (let ((protoc (assoc-ref inputs "protobuf"))) | |
515 | (substitute* "lib/protobuf/tasks/compile.rake" | |
516 | (("\"protoc\"") | |
517 | (string-append "\"" protoc "/bin/protoc" "\""))) | |
518 | #t))) | |
519 | (add-after 'unpack 'skip-failing-test | |
520 | ;; See: https://github.com/ruby-protobuf/protobuf/issues/419 | |
521 | (lambda _ | |
522 | (substitute* "spec/lib/protobuf/rpc/connectors/ping_spec.rb" | |
523 | (("expect\\(::IO\\)\\.to receive\\(:select\\).*" all) | |
524 | (string-append " pending\n" all))) | |
525 | #t)) | |
526 | (add-after 'replace-git-ls-files 'replace-more-git-ls-files | |
527 | (lambda _ | |
528 | (substitute* ((@@ (guix build ruby-build-system) first-gemspec)) | |
529 | (("`git ls-files -- \\{test,spec,features\\}/*`") | |
530 | "`find test spec features -type f | sort`") | |
531 | (("`git ls-files -- bin/*`") | |
532 | "`find bin -type f | sort`")) | |
533 | #t)) | |
534 | (replace 'check | |
535 | (lambda _ | |
536 | (invoke "rspec")))))) | |
537 | (native-inputs | |
8394619b LC |
538 | (list ruby-benchmark-ips |
539 | ruby-ffi-rzmq | |
540 | ruby-parser | |
541 | ruby-pry-byebug | |
542 | ruby-pry-stack-explorer | |
543 | ruby-rake | |
544 | ruby-rspec | |
545 | ruby-rubocop | |
546 | ruby-ruby-prof | |
547 | ruby-simplecov | |
548 | ruby-timecop | |
549 | ruby-varint | |
550 | ruby-yard)) | |
d59c84f5 | 551 | (inputs |
8394619b | 552 | (list protobuf)) |
d59c84f5 | 553 | (propagated-inputs |
8394619b | 554 | (list ruby-activesupport ruby-middleware ruby-thor ruby-thread-safe)) |
d59c84f5 MC |
555 | (home-page "https://github.com/ruby-protobuf/protobuf") |
556 | (synopsis "Implementation of Google's Protocol Buffers in Ruby") | |
557 | (description "Protobuf is an implementation of Google's Protocol Buffers | |
558 | in pure Ruby.") | |
559 | (license license:expat))) | |
77f66f53 MC |
560 | |
561 | ;;; This is a modified ruby-protobuf package used by ruby-cucumber-messages | |
562 | ;;; until https://github.com/ruby-protobuf/protobuf/pull/411 and | |
563 | ;;; https://github.com/ruby-protobuf/protobuf/pull/415 are merged upstream. | |
564 | (define-public ruby-protobuf-cucumber | |
565 | (hidden-package | |
566 | (package | |
567 | (inherit ruby-protobuf) | |
568 | (name "ruby-protobuf-cucumber") | |
569 | (version "3.10.8") | |
570 | (source | |
571 | (origin | |
572 | (method url-fetch) | |
573 | (uri (rubygems-uri "protobuf-cucumber" version)) | |
574 | (sha256 | |
575 | (base32 | |
576 | "1rd6naabhpfb1i5dr6fp5mqwaawsx0mqm73h5ycwkgbm1n2si872"))))))) |