diff mbox series

[bug#55903,v2,02/35] gnu: Add go-github-com-creack-pty.

Message ID 20220613065634.25256-2-paren@disroot.org
State New
Headers show
Series [bug#55903,v2,01/35] gnu: Add go-github-com-zenhack-go-notmuch. | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git branch success View Git branch
cbaines/applying patch success View Laminar job
cbaines/issue success View issue

Commit Message

\( June 13, 2022, 6:56 a.m. UTC
From: "(unmatched-parenthesis" <paren@disroot.org>

* gnu/packages/golang.scm (go-github-com-creack-pty): New variable.
---
 gnu/packages/golang.scm | 63 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

Comments

M June 13, 2022, 7:43 a.m. UTC | #1
( via Guix-patches via schreef op ma 13-06-2022 om 07:56 [+0100]:
> +(define (gnu-triplet->go-architecture target)
> +  (letrec-syntax
> +      ((matches (syntax-rules (=>)
> +                  ((_ (target-prefix => architecture) rest ...)
> +                   (if (string-prefix? target-prefix target)
> +                     architecture
> +                     (matches rest ...)))
> +                  ((_) (error "unsupported target" target)))))
> +    (matches ("x86_64"      => "amd64")
> +             ("i686"        => "386")
> +             ("aarch64"     => "arm64")
> +             ("arm"         => "arm")
> +             ("powerpc64le" => "ppc64le")
> +             ("powerpc"     => "ppc")
> +             ("mips64el"    => "mips64le")
> +             ("riscv64"     => "riscv64"))))


This looks like 'go-target' in (guix build-system go)?
(Haven't looked at the rest of the revised patches)

> +                       (with-output-to-file file
> +                         (lambda () (display text))))))))))

You can avoid global state here by using call-with-output-file.

Greetings,
Maxime.
\( June 13, 2022, 7:43 p.m. UTC | #2
On Mon Jun 13, 2022 at 8:43 AM BST, Maxime Devos wrote:
> This looks like 'go-target' in (guix build-system go)?
> (Haven't looked at the rest of the revised patches)
> [...]
> You can avoid global state here by using call-with-output-file.

Okay, I've addressed the issues you raised and made some last-minute
formatting modifications. Thanks again for the review!
diff mbox series

Patch

diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 6f1ed9eda2..50b7ac2e23 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -86,6 +86,23 @@  (define-module (gnu packages golang)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1))
 
+(define (gnu-triplet->go-architecture target)
+  (letrec-syntax
+      ((matches (syntax-rules (=>)
+                  ((_ (target-prefix => architecture) rest ...)
+                   (if (string-prefix? target-prefix target)
+                     architecture
+                     (matches rest ...)))
+                  ((_) (error "unsupported target" target)))))
+    (matches ("x86_64"      => "amd64")
+             ("i686"        => "386")
+             ("aarch64"     => "arm64")
+             ("arm"         => "arm")
+             ("powerpc64le" => "ppc64le")
+             ("powerpc"     => "ppc")
+             ("mips64el"    => "mips64le")
+             ("riscv64"     => "riscv64"))))
+
 ;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a
 ;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2
 ;; implementation, and gccgo-5 a complete implementation of go-1.4.  Ultimately
@@ -9862,3 +9879,49 @@  (define-public go-github-com-zenhack-go-notmuch
     (description "The notmuch package provides a Go language binding to the
 notmuch email library.")
     (license license:gpl3+)))
+
+(define-public go-github-com-creack-pty
+  (package
+    (name "go-github-com-creack-pty")
+    (version "1.1.18")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/creack/pty")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1qqhcgfym0napz8damj7dhfw28g2qn2f5h3lr93i0sxawq926yzc"))))
+    (build-system go-build-system)
+    (arguments
+     (list #:import-path "github.com/creack/pty"
+           #:modules '((ice-9 popen)
+                       (ice-9 textual-ports)
+                       (guix build go-build-system)
+                       (guix build utils))
+           #:phases
+           #~(modify-phases %standard-phases
+               (add-after 'unpack 'regenerate-types
+                 (lambda* (#:key import-path #:allow-other-keys)
+                   ;; Generated files are included (ztypes_*). We need to remake
+                   ;; them with Cgo.
+                   (with-directory-excursion (string-append "src/" import-path)
+                     (let* ((go-arch
+                             #$(gnu-triplet->go-architecture
+                                (or (%current-target-system)
+                                    (nix-system->gnu-triplet (%current-system)))))
+                            (file (string-append "ztypes_" go-arch ".go"))
+                            (pipe (open-input-pipe "go tool cgo -godefs types.go"))
+                            (text (get-string-all pipe)))
+                       (close-pipe pipe)
+                       (for-each delete-file
+                         (find-files (getcwd) (file-name-predicate
+                                               "ztypes_[a-zA-Z0-9_]+.go")))
+                       (with-output-to-file file
+                         (lambda () (display text))))))))))
+    (home-page "https://github.com/creack/pty")
+    (synopsis "Pseudoterminal handling in Go")
+    (description
+     "The pty package provides functions for working with Unix pseudoterminals.")
+    (license license:expat)))