gnu: emacs-svg-icon: Fix grammar.
[jackhill/guix/guix.git] / gnu / packages / rpc.scm
index 3691440..4a27987 100644 (file)
@@ -2,6 +2,9 @@
 ;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
+;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
+;;; Copyright © 2021 Greg Hogan <code@greghogan.com>
+;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix packages)
   #:use-module (guix git-download)
   #:use-module (guix download)
+  #:use-module (guix utils)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages adns)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages bison)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages cpp)
+  #:use-module (gnu packages flex)
+  #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages protobuf)
   #:use-module (gnu packages python)
   #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages regex)
   #:use-module (gnu packages tls))
 
 (define-public grpc
   (package
     (name "grpc")
-    (version "1.27.3")
+    (version "1.34.0")
     (outputs '("out" "static"))
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/grpc/grpc.git")
+                    (url "https://github.com/grpc/grpc")
                     (commit (string-append "v" version))))
               (file-name (git-file-name name version))
               (sha256
                (base32
-                "0czmbwnafc7jnrrq2fnac2av83vs2q7q0wy4k11w9zbpld7j5h6d"))))
+                "1fs407hnlnm0b8sncjwys9rc7ia5nb7wxrpx39nq3pzzfs1lv3vq"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no test target
@@ -56,6 +67,7 @@
              "-DgRPC_CARES_PROVIDER=package"
              "-DgRPC_SSL_PROVIDER=package"
              "-DgRPC_PROTOBUF_PROVIDER=package"
+             "-DgRPC_RE2_PROVIDER=package"
              (string-append "-DCMAKE_INSTALL_PREFIX="
                             (assoc-ref %outputs "out"))
              "-DCMAKE_INSTALL_LIBDIR=lib"
      `(("abseil-cpp" ,abseil-cpp)
        ("c-ares" ,c-ares/cmake)
        ("openssl" ,openssl)
+       ("re2" ,re2)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("protobuf" ,protobuf)
+     `(("pkg-config" ,pkg-config)
+       ("protobuf" ,protobuf)
        ("python" ,python-wrapper)))
     (home-page "https://grpc.io")
     (synopsis "High performance universal RPC framework")
@@ -117,25 +131,73 @@ browsers to backend services.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/grpc/grpc.git")
+                    (url "https://github.com/grpc/grpc")
                     (commit (string-append "v" version))))
               (file-name (git-file-name "grpc" version))
               (sha256
                (base32
-                "1jimqz3115f9pli5w6ik9wi7mjc7ix6y7yrq4a1ab9fc3dalj7p2"))))))
+                "1jimqz3115f9pli5w6ik9wi7mjc7ix6y7yrq4a1ab9fc3dalj7p2"))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments grpc)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; Note: This would be nicer as a snippet, but that creates a tarball
+           ;; instead of a checkout and breaks assumptions made by the builder.
+           (add-after 'unpack 'rename-gettid
+             (lambda _
+               ;; Rename custom gettid() syscall wrapper to avoid conflict
+               ;; with gettid() from glibc 2.30.
+               (substitute* '("src/core/lib/gpr/log_linux.cc"
+                              "src/core/lib/gpr/log_posix.cc"
+                              "src/core/lib/iomgr/ev_epollex_linux.cc")
+                 (("gettid\\(")
+                  "sys_gettid("))
+               #t))))))))
 
 (define-public python-grpcio
   (package
     (name "python-grpcio")
-    (version "1.17.1")
+    (version "1.27.2")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "grpcio" version))
        (sha256
         (base32
-         "0qb9y6j83nxa6d4kc60i8yfgdm7a8ms7b54kncjzf5y7nsxp8rzx"))))
+         "0zl89jwcff9hkd8mi4yf3qbhns9vbv1s4x4vahm5mkpr7jwk5ras"))
+       (modules '((guix build utils) (ice-9 ftw)))
+       (snippet
+        '(begin
+           (with-directory-excursion "third_party"
+             ;; Delete the bundled source code of libraries that are possible
+             ;; to provide as inputs.
+             (for-each delete-file-recursively
+                       (scandir "."
+                                (lambda (file)
+                                  (not (member file
+                                               '("." ".."
+                                                 "abseil-cpp"
+                                                 "address_sorting"
+                                                 "upb")))))))
+           #t))))
     (build-system python-build-system)
+    (arguments
+     '(#:phases (modify-phases %standard-phases
+                  (add-before 'build 'use-system-libraries
+                    (lambda _
+                      (setenv "GRPC_PYTHON_BUILD_SYSTEM_CARES" "1")
+                      (setenv "GRPC_PYTHON_BUILD_SYSTEM_OPENSSL" "1")
+                      (setenv "GRPC_PYTHON_BUILD_SYSTEM_ZLIB" "1")
+                      #t))
+                  (add-before 'build 'configure-compiler
+                    (lambda _
+                      (substitute* '("setup.py" "src/python/grpcio/commands.py")
+                        (("'cc'") "'gcc'"))
+                      #t)))))
+    (inputs
+     `(("c-ares" ,c-ares)
+       ("openssl" ,openssl)
+       ("zlib" ,zlib)))
     (propagated-inputs
      `(("python-six" ,python-six)))
     (home-page "https://grpc.io")
@@ -143,3 +205,45 @@ browsers to backend services.")
     (description "This package provides a Python library for communicating
 with the HTTP/2-based RPC framework gRPC.")
     (license license:asl2.0)))
+
+(define-public apache-thrift
+  (package
+    (name "apache-thrift")
+    (version "0.14.1")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/apache/thrift")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1mj3c5jhjbg2sfkx9k9jqg88h1c5rswr9b606s02ny9ydf3akcny"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f
+       #:configure-flags
+       (list (string-append "--with-boost="
+                            (assoc-ref %build-inputs "boost")))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)
+       ("flex" ,flex)
+       ("bison" ,bison)))
+    (inputs
+     `(("boost" ,boost)
+       ("libressl" ,libressl)))
+    (outputs '("out" "lib" "include"))
+    (home-page "https://thrift.apache.org/")
+    (synopsis
+     "Lightweight, language-independent software stack for point-to-point
+RPC")
+    (description
+     "Thrift provides clean abstractions and implementations for data
+transport, data serialization, and application level processing.  The code
+generation system takes a simple definition language as input and generates
+code across programming languages that uses the abstracted stack to build
+interoperable RPC clients and servers.")
+    (license license:asl2.0)))