unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: david larsson <david.larsson@selfhosted.xyz>
To: 51512@debbugs.gnu.org
Cc: Guix-patches <guix-patches-bounces+david.larsson=selfhosted.xyz@gnu.org>
Subject: [bug#51512] [PATCH v 3]: gnu: Add bash-bcu.
Date: Fri, 01 Jul 2022 20:13:22 +0200	[thread overview]
Message-ID: <482320c017a2ab923b040cb83746e563@selfhosted.xyz> (raw)
In-Reply-To: <93d8232c104dc63f46f6b975073b56ca@selfhosted.xyz>

[-- Attachment #1: Type: text/plain, Size: 91 bytes --]

New version based on prior reviews and off-list (IRC) communication.

Best regards,
David L

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-Add-bash-coding-utils.patch --]
[-- Type: text/x-diff; name=0001-gnu-Add-bash-coding-utils.patch, Size: 29278 bytes --]

From afcf99849048cf31384d9efcce99f2a4815346d6 Mon Sep 17 00:00:00 2001
From: David Larsson <david.larsson@selfhosted.xyz>
Date: Wed, 29 Jun 2022 23:35:50 +0200
Subject: [PATCH] gnu: Add bash-coding-utils

* gnu/packages/bash.scm (guile-bash-for-bash-coding-utils,
 org-html-themes/methuselah-0, pydaemon, bash-coding-utils):
New variables.
* gnu/packages/patches/guile-bash-args-from-stdin.patch: New file.
* gnu/local.mk: Register patch.
---
 gnu/local.mk                                  |   1 +
 gnu/packages/bash.scm                         | 466 +++++++++++++++++-
 .../patches/guile-bash-args-from-stdin.patch  |  42 ++
 3 files changed, 504 insertions(+), 5 deletions(-)
 create mode 100644 gnu/packages/patches/guile-bash-args-from-stdin.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 353b91cfd2..b9ff9a3784 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1229,6 +1229,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/guile-1.8-cpp-4.5.patch			\
   %D%/packages/patches/guile-2.2-skip-oom-test.patch            \
   %D%/packages/patches/guile-2.2-skip-so-test.patch             \
+  %D%/packages/patches/guile-bash-args-from-stdin.patch		\
   %D%/packages/patches/guile-default-utf8.patch			\
   %D%/packages/patches/guile-2.2-default-utf8.patch		\
   %D%/packages/patches/guile-relocatable.patch			\
diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index 72758560cd..f058793160 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -26,17 +26,34 @@
 (define-module (gnu packages bash)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
+  #:use-module (gnu packages bison)
   #:use-module (gnu packages bootstrap)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages dns)
   #:use-module (gnu packages elf)
-  #:use-module (gnu packages ncurses)
-  #:use-module (gnu packages readline)
-  #:use-module (gnu packages bison)
+  #:use-module (gnu packages file)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
+  #:use-module (gnu packages guile-xyz)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages libffi)
+  #:use-module (gnu packages lsof)
+  #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
+  #:use-module (gnu packages pcre)
+  #:use-module (gnu packages perl)
+  #:use-module (gnu packages php)
   #:use-module (gnu packages pkg-config)
-  #:use-module (gnu packages guile)
+  #:use-module (gnu packages python)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -45,7 +62,8 @@ (define-module (gnu packages bash)
   #:use-module (guix monads)
   #:use-module (guix store)
   #:use-module (guix build-system gnu)
-  #:use-module (guix build-system trivial)
+  #:use-module (guix build-system copy)
+  #:use-module (guix build-system trivial)  
   #:autoload   (guix gnupg) (gnupg-verify*)
   #:autoload   (guix base32) (bytevector->nix-base32-string)
 
@@ -456,3 +474,441 @@ (define-public bash-ctypes
 function interface (FFI) directly in your shell.  In other words, it allows
 you to call routines in shared libraries from within Bash.")
     (license license:expat)))
+
+(define-public guile-bash-for-bash-coding-utils
+  (let ((commit "1eabc563ca5692b3e08d84f1f0e6fd2283284469")
+        (revision "0"))
+    (package
+      (inherit guile2.0-bash)
+      (version (string-append "0.1.6-" revision "." (string-take commit 7)))
+      (home-page (package-home-page guile2.0-bash))
+      (name "guile-bash-for-bash-coding-utils")
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (commit commit)
+                      (url home-page)))
+                (sha256
+                 (base32
+                  "097vny990wp2qpjij6a5a5gwc6fxzg5wk56inhy18iki5v6pif1p"))
+                (file-name (string-append name "-" version "-checkout"))
+                (patches (search-patches "guile-bash-args-from-stdin.patch"))))
+      (inputs
+       `(("guile" ,guile-3.0-latest)
+         ,@(assoc-remove! (package-inputs guile2.0-bash) "guile")))
+      (propagated-inputs (list bash))
+      (arguments
+       `(#:tests? #f
+         #:phases (modify-phases %standard-phases
+                    (add-after 'install 'install-guile
+                      (lambda* (#:key inputs outputs #:allow-other-keys)
+                        (copy-recursively
+                         (string-append (assoc-ref outputs "out")
+                                        (assoc-ref inputs "guile") "/share")
+                         (string-append (assoc-ref outputs "out") "/share"))
+                      #t)))
+         ,@(package-arguments guile2.0-bash))))))
+
+(define org-html-themes/methuselah-0
+  ;; XXX Bundles jquery and several other .js ‘libraries’ — problem?
+  ;; XXX A form of https://github.com/fniessen/org-html-themes but not
+  ;; drop-in compatible (using that would break the BCU docs).
+  ;; ‘Ideally’ we'd re-render them but uugh.
+  (let ((commit "8fff1d4c0879537b81f94d157a8c36485c790ee5")
+        (revision "0"))
+    (package
+      (name "org-html-themes")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (commit commit)
+               (url "https://gitlab.com/methuselah-0/org-html-themes.git")))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1hddgfdry8r65a5zqm1pc0rgicv78ls6giavfr5g0rzx428i1j45"))))
+      (build-system copy-build-system)
+      (home-page "https://github.com/fniessen/org-html-themes") ; XXX
+      (synopsis "Export Org mode files to HTML")
+      (description
+       "The Org-HMTL framework provides cross-browser themes for exporting Org
+documents to cross-browser HTML mark-up.")
+      (license license:cc-by-sa3.0))))
+
+(define-public pydaemon
+  (let ((commit "dae2798a2c1caa56025c6da69c0d464f70d9c79a")
+        (revision "0"))
+    (package
+      (name "pydaemon")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (commit commit)
+               (url "https://gitlab.com/methuselah-0/pydaemon.git")))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "1cbg48ljyjqw1vxcb0sqhg9cxx0vgs6ggsdg8yvj441s6gakp2sh"))))
+      (build-system trivial-build-system)
+
+      (inputs (list coreutils netcat python socat util-linux))
+      (arguments
+       (list #:modules '((guix build utils))
+             #:builder
+             #~(begin
+                 (use-modules (guix build utils))
+                   (with-directory-excursion #$(package-source this-package)
+                     (mkdir-p (string-append (assoc-ref %outputs "out") "/bin"))
+                     (copy-file "pydaemon.py"
+                                (string-append (assoc-ref %outputs "out") "/bin/pydaemon.py"))
+                     (copy-file "py-net-daemon.py"
+                                (string-append (assoc-ref %outputs "out") "/bin/py-net-daemon.py"))
+                     (copy-file "pydaemon.sh"
+                                (string-append (assoc-ref %outputs "out") "/bin/pydaemon.sh"))
+
+                     (substitute* (find-files (string-append #$output "/bin") "\\.sh$")
+                       (("(flock) " library _)
+                        (string-append #$(this-package-input "util-linux") "/bin/" library))
+                       (("(socat) " library _)
+                        (string-append #$(this-package-input "socat") "/bin/" library))
+                       (("(nc) " library _)
+                        (string-append #$(this-package-input "netcat") "/bin/" library))
+                       (("( )(mkdir|cat|sleep|chown|id|kill|dirname) " all pre command _)
+                        (string-append pre #$(this-package-input "coreutils") "/bin/" command " "))
+                       (("(\\()(mkdir|cat|sleep|chown|id|kill|dirname) " all pre command _)
+                        (string-append pre #$(this-package-input "coreutils") "/bin/" command " "))
+                       (("(python3) " library _)
+                        (string-append #$(file-append (this-package-input "python")
+                                                      "/bin/python"
+                                                      (version-major+minor
+                                                       (package-version
+                                                        (this-package-input
+                                                         "python"))))
+                                       " ")))))))
+      (home-page "https://gitlab.com/methuselah-0/pydaemon")
+      (synopsis "Use python from bash")
+      (description "With pydaemon you can pipe strings of python code to one
+or multiple persistent python processes that keeps state, and get the results
+back as strings.  Can be used over either of a unix or tcp socket.")
+      (license license:cc-by-sa3.0))))
+
+(define-public bash-coding-utils
+  (let ((commit "ce9e7a8910d7debe29a07b48aa0770913b1ecdaf")
+        (revision "0"))
+    (package
+      (name "bash-coding-utils")
+      (version (git-version "0.3.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri
+          (git-reference
+           (commit commit)
+           (url "https://git.sr.ht/~methuselah-0/bash-coding-utils")
+           (recursive? #t))          )
+         (sha256
+          (base32 "0hgj0fy66bj5kbjs02fvjp5n9a5sz32fk45rc3id2bs0b2k9jrnx"))
+         (file-name (git-file-name name version))))
+      (build-system trivial-build-system)
+      (arguments
+       (list #:modules '((guix build utils))
+             #:builder
+             #~(begin
+                 (use-modules (guix build utils)
+                              (ice-9 ftw)
+                              (ice-9 match)
+                              (srfi srfi-26))
+                 (let* ((bash #$(this-package-input "bash"))
+                        (bin (string-append #$output "/bin"))
+                        (bcu.sh (string-append bin "/bcu.sh"))
+                        (share (string-append #$output "/share"))
+                        (doc (string-append share "/doc/" #$name))
+                        ;; Everything but bcu.sh itself is only ever accessed
+                        ;; internally by bcu, so put it all in share/.
+                        (bcu-root (string-append share "/bcu"))
+                        ;; XXX We should honour the without-tests transformation!
+                        (tests? (not #$(%current-target-system))))
+
+                   ;; Copy the ‘source’ and submodules directly to the output.
+                   (let ((source #$(package-source this-package)))
+                     (with-directory-excursion source
+                       (mkdir-p bcu-root)
+                       (for-each (lambda (file)
+                                   (copy-recursively file
+                                                     (string-append bcu-root
+                                                                    "/" file)))
+                                 (list "bcu.sh"
+                                       "dependency_paths.sh"
+                                       "bcu-test.sh"
+                                       "docs"
+                                       "src"
+                                       "submodules"))
+                       ;; Moving docs/ out of bcu-root would break symlinks.
+                       (mkdir-p (dirname doc))
+                       (symlink (string-append bcu-root "/docs") doc)))
+
+                   ;; Patch absolute file name references.
+                   (let* ((original-path (getenv "PATH"))
+                          (shebang-inputs '(#$@(map (lambda (name)
+                                                      (this-package-input name))
+                                                    '("guile"
+                                                      "python"))))
+                          (shebang-path (string-join
+                                         (map (cut string-append <> "/bin")
+                                              (cons bash shebang-inputs))
+                                         ":")))
+                     (setenv "PATH" shebang-path)
+                     (for-each patch-shebang
+                               (find-files #$output "\\.(sh|scm|py)$"))
+                     (setenv "PATH" original-path))
+
+                   ;; Add paths to dependencies - defined in
+                   ;; dependency_paths.sh, except the libguile-bash.so
+                   ;; file.
+                   (substitute* (find-files #$output "\\.sh$")
+                     (("[^ ]*(/lib/bash/libguile-bash\\.so)" _ library)
+                      (string-append
+                       #$(this-package-input "guile-bash-for-bash-coding-utils")
+                       library)))
+
+                   ;; TODO: use a PCRE regex to substitute invocations of coreutils
+                   ;; commands
+                   ;; TODO: condense below substitutions?
+                   (substitute* (find-files #$output "dependency_paths\\.sh$")
+                     (("export BCUCTYPES=(ctypes.sh)" _ library)
+                      (string-append "export BCUCTYPES="
+                                     #$(this-package-input "bash-ctypes")
+                                     "/bin/" library))
+                     (("export BCUDIFF=(diff)" _ library)
+                      (string-append "export BCUDIFF="
+                                     #$(this-package-input "diffutils")
+                                     "/bin/" library))
+                     (("export BCUPING=(ping)" _ library)
+                      (string-append "export BCUPING=/run/setuid-programs/ping"))
+                     (("export BCUPS=(ps)" _ library)
+                      (string-append "export BCUPS="
+                                     #$(this-package-input "procps")
+                                     "/bin/" library))
+                     (("export BCUFILE=(file)" _ library)
+                      (string-append "export BCUFILE="
+                                     #$(this-package-input "findutils")
+                                     "/bin/" library))
+                     (("export BCUFIND=(find)" _ library)
+                      (string-append "export BCUFIND="
+                                     #$(this-package-input "findutils")
+                                     "/bin/" library))
+                     (("export BCUFLOCK=(flock)" _ library)
+                      (string-append "export BCUFLOCK="
+                                     #$(this-package-input "util-linux")
+                                     "/bin/" library))
+                     (("export BCUGAWK=(gawk)" _ library)
+                      (string-append "export BCUGAWK="
+                                     #$(this-package-input "gawk")
+                                     "/bin/" library))
+                     (("export BCUGREP=(grep)" _ library)
+                      (string-append "export BCUGREP="
+                                     #$(this-package-input "grep")
+                                     "/bin/" library))
+                     (("export GUILE_LOAD_PATH=(.*)$")
+                      (string-append "export GUILE_LOAD_PATH=\""
+                                     (string-join
+                                      '(#$@(map (lambda (name)
+                                                  (file-append (this-package-input name)
+                                                               "/share/guile/site/"
+                                                               (version-major+minor
+                                                                (package-version
+                                                                 (this-package-input
+                                                                  "guile")))))
+                                                '("guile-bash-for-bash-coding-utils")))
+                                      ":")
+                                     "${GUILE_LOAD_PATH:+:}${GUILE_LOAD_PATH}\"\n"))
+                     (("export BCUJQ=(jq)" _ library)
+                      (string-append "export BCUJQ="
+                                     #$(this-package-input "jq")
+                                     "/bin/" library))
+                     (("export BCULSOF=(lsof)" _ library)
+                      (string-append "export BCULSOF="
+                                     #$(this-package-input "lsof")
+                                     "/bin/" library))
+                     (("export BCUNMAP=(nmap)" _ library)
+                      (string-append "export BCUNMAP="
+                                     #$(this-package-input "nmap")
+                                     "/bin/" library))
+                     (("export BCUPCREGREP=(pcregrep)" _ library)
+                      (string-append "export BCUPCREGREP="
+                                     (assoc-ref %build-inputs "pcre:bin")
+                                     "/bin/" library))
+                     (("export BCUPERL=(perl)" _ library)
+                      (string-append "export BCUPERL="
+                                     #$(this-package-input "perl")
+                                     "/bin/" library))
+                     (("export BCUPHP=(php)" _ library)
+                      (string-append "export BCUPHP="
+                                     #$(this-package-input "php")
+                                     "/bin/" library))
+                     (("export BCUPS=(ps)" _ library)
+                      (string-append "export BCUPS="
+                                     #$(this-package-input "procps")
+                                     "/bin/" library))
+                     (("export BCUPYDAEMON=(pydaemon.sh)" _ library)
+                      (string-append "export BCUPYDAEMON="
+                                     #$(this-package-input "pydaemon")
+                                     "/bin/" library))
+                     (("export BCUPYTHONVERSION=(.*)$" _)
+                      (string-append "export BCUPYTHONVERSION="
+                                     #$(version-major+minor
+                                        (package-version
+                                         (this-package-input
+                                          "python")))))
+                     (("export BCUPYTHON=python(.*)$" _)
+                      (string-append "export BCUPYTHON="
+                                     #$(file-append (this-package-input "python")
+                                                    "/bin/python"
+                                                    (version-major+minor
+                                                     (package-version
+                                                      (this-package-input
+                                                       "python"))))
+                                     "\n"))
+                     (("export PYTHONPATH=.*" all)
+                      (string-append "export PYTHONPATH=\""
+                                     (string-join
+                                      '(#$@(map (lambda (name)
+                                                  (file-append (this-package-input name)
+                                                               "/lib/python"
+                                                               (version-major+minor
+                                                                (package-version
+                                                                 (this-package-input
+                                                                  "python")))
+                                                               "/site-packages"))
+                                                '("python"
+                                                  "python-elementpath"
+                                                  "python-lxml"
+                                                  "python-netaddr")))
+                                      ":")
+                                     "${PYTHONPATH:+:}${PYTHONPATH}\"\n"))
+                     (("export BCUSED=(sed)" _ library)
+                      (string-append "export BCUSED="
+                                     #$(this-package-input "sed")
+                                     "/bin/" library))
+                     (("export BCUSOCAT=(socat)" _ library)
+                      (string-append "export BCUSOCAT="
+                                     #$(this-package-input "socat")
+                                     "/bin/" library))
+                     (("export BCUTREE=(tree)" _ library)
+                      (string-append "export BCUTREE="
+                                     #$(this-package-input "tree")
+                                     "/bin/" library))
+                     (("export BCUWHICH=(which)" _ library)
+                      (string-append "export BCUWHICH="
+                                     #$(this-package-input "which")
+                                     "/bin/" library))
+                     (("export XDG_DATA_DIRS=(.*)$")
+                      (string-append
+                       "[[ -e /run/current-system/profile/share ]] && "
+                       "export XDG_DATA_DIRS="
+                       "/run/current-system/profile/share"
+                       "${XDG_DATA_DIRS:+:}${XDG_DATA_DIRS}\n"))
+                     (("export BCUXARGS=(xargs)" _ library)
+                      (string-append "export BCUXARGS="
+                                     #$(this-package-input "findutils")
+                                     "/bin/" library))
+                     (("export BCUXDGOPEN=(xdg-open)" _ library)
+                      (string-append "export BCUXDGOPEN="
+                                     #$(this-package-input "xdg-utils")
+                                     "/bin/" library))
+                     (("export BCUXMLLINT=(xmllint)" _ library)
+                      (string-append "export BCUXMLLINT="
+                                     #$(this-package-input "libxml2-xpath0")
+                                     "/bin/" library)))
+
+                   ;; Symlink to bcu.sh from the output bin directory.
+                   (mkdir-p bin)
+                   (symlink (string-append bcu-root "/bcu.sh") bcu.sh)
+                   (chmod bcu.sh #o555)
+
+                   ;; Disable network and gui tests, and one test for setopts which
+                   ;; doesn't work inside the Guix build environment.
+                   (with-output-to-file (string-append bcu-root "/disabled_tests.txt")
+                     (lambda _
+                       (format #t "~{~a~%~}"
+                               (list "ip_of_test_1"
+                                     "setopts_test_4"
+                                     "web_media_server_test_1"
+                                     "web_api_server_test_1"
+                                     "find_gui_test_1"))))
+
+                   ;; Set up a minimal test environment & run the tests.
+                   (when tests?
+                     (setenv "PATH" (string-append bin ":"
+                                                   bash "/bin:"
+                                                   (getenv "PATH")))
+                     (setenv "SHELL"
+                             (string-append bash "/bin/bash"))
+                     (for-each (lambda (test-input)
+                                 (setenv "PATH"
+                                         (string-append
+                                          (assoc-ref %build-inputs test-input)
+                                          "/bin:" (getenv "PATH"))))
+                               (list "coreutils"))
+                     (setenv "HOME" "/tmp")
+                     (with-directory-excursion bcu-root
+                       (invoke "./bcu-test.sh")
+                       ;; No need to keep passed tests in the final output
+                       (for-each delete-file
+                                 (list "bcu-test.sh"
+                                       "disabled_tests.txt"))))))))
+      (native-inputs
+       `( ;; org-html-themes is bundled upstream as a git submodule,
+         ;; but we package it separately and copy it manually above.
+         ("org-html-themes" ,(package-source org-html-themes/methuselah-0))
+         ("coreutils" ,coreutils) ;; Needed for tests.
+         ;; TODO: unable to get the correct hash for pcre:bin output using
+         ;; the new notation (see inputs list below)
+         ("pcre:bin" ,pcre "bin")))
+      (inputs (list bash
+                    bash-ctypes
+                    coreutils
+                    diffutils
+                    file
+                    findutils
+                    gawk
+                    grep
+                    guile-3.0
+                    guile-bash-for-bash-coding-utils
+                    jq
+                    libxml2-xpath0
+                    lsof
+                    nmap
+                    ;;`(,pcre "bin") ;; TODO doesn't work when calling
+                    ;; #$(this-package-input pcre)!
+                    perl
+                    php
+                    procps
+                    pydaemon
+                    python
+                    python-elementpath
+                    python-lxml
+                    python-netaddr
+                    python-yq
+                    sed
+                    socat
+                    tree
+                    which
+                    xdg-utils
+                    util-linux))
+      (propagated-inputs
+       `(("bash" ,bash))) ;; the bash shell needs to be the same version
+      ;;as guile-bash is compiled against
+      (home-page "https://git.sr.ht/~methuselah-0/bash-coding-utils")
+      (synopsis "Functions and tools for software prototyping in Bash")
+      (description
+       "Bash-Coding-Utils is a library of Bash functions and wrappers that can
+be useful when writing quick implementations of new programs.  It helps you
+work with JSON, XML, API's and parallelization, and installs some helper
+programs commonly used in Bash scripting.  Just run @command{. bcu.sh}, type
+@command{bcu__}, hit @key{TAB} to see available functions and give any of them
+the @code{--help} flag to see how to use it, or run @command{bcu__docs} for
+the full HTML documentation.")
+      (license license:gpl3))))
diff --git a/gnu/packages/patches/guile-bash-args-from-stdin.patch b/gnu/packages/patches/guile-bash-args-from-stdin.patch
new file mode 100644
index 0000000000..ad42616c70
--- /dev/null
+++ b/gnu/packages/patches/guile-bash-args-from-stdin.patch
@@ -0,0 +1,42 @@
+From a124921666a16cb4e93f59a653f98b99c78eb2ca Mon Sep 17 00:00:00 2001
+From: David Larsson <david.larsson@selfhosted.xyz>
+Date: Thu, 11 Nov 2021 14:07:04 +0100
+Subject: [PATCH] Enable reading arguments from bash via stdin
+
+* lisp/gnu/bash.scm(define-bash-function): read from stdin
+to SCM_ARGS array when it is open, and separate args by null
+instead of newline if -z option is passed as $1.
+---
+ lisp/gnu/bash.scm | 16 ++++++++++++----
+ 1 file changed, 12 insertions(+), 4 deletions(-)
+
+diff --git a/lisp/gnu/bash.scm b/lisp/gnu/bash.scm
+index 199ebc0..e9dcea5 100644
+--- a/lisp/gnu/bash.scm
++++ b/lisp/gnu/bash.scm
+@@ -326,10 +326,18 @@
+       (hashq-set! *funcs* symbol thunk)
+       (unsafe-format/eval
+        "function ~a {
+-            SCM_ARGS=($@)    ;
+-            local retval=$~a ;
+-            unset SCM_ARGS   ;
+-            return $retval   ;
++            local -a Input SCM_ARGS                                          ;
++            [[ ! -t 0 ]] && mapfile -d '' Input                              ;
++            if [[ -n \"${Input[@]}\" ]]; then
++                if [[ \"$1\" == -z ]]; then
++                    local -a SCM_ARGS=\"(${Input[*]@Q})\"                    ;
++                else
++                    mapfile -t SCM_ARGS < <(printf '%s' \"${Input[@]}\"); fi ;
++            else
++                SCM_ARGS=(\"$@\"); fi                                        ;
++            local retval=$~a                                                 ;
++            unset SCM_ARGS                                                   ;
++            return $retval                                                   ;
+        }"
+        symbol special-varname))))
+ 
+-- 
+2.31.0
+
-- 
2.33.1


  parent reply	other threads:[~2022-07-01 18:16 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-30 14:59 [bug#51512] [PATCH]: gnu: Add bash-bcu david larsson
2021-11-07 12:40 ` Tobias Geerinckx-Rice via Guix-patches via
2021-11-09 12:32   ` [bug#51512] [PATCH v 2]: " david larsson
2021-11-20 14:11     ` Tobias Geerinckx-Rice via Guix-patches via
2021-11-23 12:44       ` david larsson
2022-07-01 18:13     ` david larsson [this message]
2022-08-02 20:21       ` [bug#51512] [PATCH v 3]: " david larsson
2022-08-27 18:29         ` david larsson
2023-05-20 19:23           ` david larsson
2023-05-20 19:28             ` david larsson
2023-05-20 20:16           ` [bug#51512] [PATCH v 4]: " david larsson
2022-07-04 21:11 ` [bug#51512] [PATCH]: " ( via Guix-patches via
2022-07-04 21:21   ` ( via Guix-patches via
2023-05-21  6:58 ` [bug#51512] [PATCH v5]: " david larsson
2023-05-23  4:51 ` [bug#51512] [PATCH v6 0/3]: " david larsson
2023-05-23  4:53 ` [bug#51512] [PATCH v6 1/3]: " david larsson
2023-05-23  4:55 ` [bug#51512] [PATCH v6 2/3]: gnu: Add guile-bash-for-bash-coding-utils david larsson
2023-05-23  4:56 ` [bug#51512] [PATCH v6 3/3]: gnu: Add bash-coding-utils david larsson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=482320c017a2ab923b040cb83746e563@selfhosted.xyz \
    --to=david.larsson@selfhosted.xyz \
    --cc=51512@debbugs.gnu.org \
    --cc=guix-patches-bounces+david.larsson=selfhosted.xyz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).