Subject: Re: [bug#56474] [PATCH] gnu: Add goawk.

From: Maxime Devos <[email-masked]>
Date: Wed, 20 Jul 2022 15:34:59 +0200

On 10-07-2022 03:58, Paul A. Patience wrote:
> * gnu/packages/gawk.scm (goawk): New variable.
> ---
>   gnu/packages/gawk.scm | 41 ++++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 40 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
> index 9feaf059fb..9bc96d87e7 100644
> --- a/gnu/packages/gawk.scm
> +++ b/gnu/packages/gawk.scm
> @@ -33,7 +33,8 @@ (define-module (gnu packages gawk)
>     #:use-module (guix git-download)
>     #:use-module (guix utils)
>     #:use-module (guix build-system copy)
> -  #:use-module (guix build-system gnu))
> +  #:use-module (guix build-system gnu)
> +  #:use-module (guix build-system go))
>
>   (define-public gawk
>     (package
> @@ -245,3 +246,41 @@ (define-public cppawk-egawk
>          (delete "gawk-mpfr")
>          (prepend egawk-next)))
>       (synopsis "cppawk that calls Enhanced GNU Awk by default")))

What Ludo wrote about not making the module graph more cyclic than it 
already is with all that entails, and ...

> +(define-public goawk
> +  (package
> +    (name "goawk")
> +    (version "1.19.0")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/benhoyt/goawk")
> +             (commit (string-append "v" version))))
> +       (file-name (git-file-name name version))
> +       (sha256
> +        (base32 "12z7nzrqyx0y18bsc95i1vp251jw3ik2xj5g8bc12vybndw5x0j0"))))
> +    (build-system go-build-system)
> +    (arguments
> +     '(#:import-path "github.com/benhoyt/goawk"
> +       #:install-source? #f
> +       #:phases
> +       (modify-phases %standard-phases
> +         (add-after 'unpack 'fix-paths
> +           (lambda _
> +             (substitute* "src/github.com/benhoyt/goawk/interp/interp.go"
> +               (("/bin/sh") (which "sh")))
> +             (substitute* "src/github.com/benhoyt/goawk/goawk_test.go"
> +               (("/bin/sh") (which "sh")))))

... these two can be combined, substitute* accepts a list of files, it's 
not restricted to a single file.

Also, this which seems incorrect when cross-compiling, do 
(search-input-file inputs "bin/sh") instead and add 'bash-minimal' (or 
'bash'?) to inputs, so you get the cross-compiled bash instead of the 
native bash (for the goawk_test.go, it probably doesn't matter, but it's 
important for interp.go).

Greetings,
Maxime.