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
Subject: [bug#51512] [PATCH]: gnu: Add bash-bcu.
Date: Sat, 30 Oct 2021 16:59:33 +0200	[thread overview]
Message-ID: <3add15b77522d6e9ebd715a19d966666@selfhosted.xyz> (raw)

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

Hi,
This patch adds "bash-coding-utils" as the bash-bcu package.

Best regards,
David

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

From b79e6173263acb8d77946a08e03d5b01a9f5f86c Mon Sep 17 00:00:00 2001
From: David Larsson <david.larsson@selfhosted.xyz>
Date: Fri, 29 Oct 2021 13:58:41 +0200
Subject: [PATCH] gnu: Add bash-bcu.

* gnu/packages/bash.scm (bash-bcu): New variable.
---
 gnu/packages/bash.scm | 193 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 193 insertions(+)

diff --git a/gnu/packages/bash.scm b/gnu/packages/bash.scm
index ed2931fd97..f89dcf5341 100644
--- a/gnu/packages/bash.scm
+++ b/gnu/packages/bash.scm
@@ -25,17 +25,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 bootstrap)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages curl)
+  #:use-module (gnu packages dns)
+  #:use-module (gnu packages ed)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages freedesktop)
+  #:use-module (gnu packages gawk)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages ncurses)
+  #:use-module (gnu packages networking)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages libffi)
+  #: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 python)
+  #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages guile)
+  #:use-module (gnu packages guile-xyz)
+  #:use-module (gnu packages tcl)
+  #:use-module (gnu packages web)
+  #:use-module (gnu packages xml)
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -448,3 +465,179 @@ in Bash, but you can use it to test any UNIX program.")
 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 bash-bcu
+  (let ((pyver (version-major+minor (package-version python)))
+        (guilever (version-major+minor (package-version guile-3.0))))
+    (package
+      (name "bash-bcu")
+      (version "v0.2.0")
+      (home-page "https://gitlab.com/methuselah-0/bash-coding-utils.sh")
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (commit "40d6527a9effb4e18778c37bebaa9f3a58de12d6")
+               (url "https://gitlab.com/methuselah-0/bash-coding-utils.sh.git")
+               (recursive? #t)))
+         (sha256
+          (base32
+           "007g6wfybjr0ms32qikb545r11lgm3p98cd7dbzpfyh0grgn9vj1"))))
+      (inputs `(("bash-full" ,bash)
+                ("bindutils" ,isc-bind "utils")
+                ("coreutils" ,coreutils)
+                ("ctypes.sh" ,bash-ctypes)
+                ("curl" ,curl)
+                ("diffutils" ,diffutils)
+                ("ed" ,ed)
+                ("expect" ,expect)
+                ("find" ,findutils)
+                ("gawk" ,gawk)
+                ("grep" ,grep)
+                ("guile" ,guile-3.0)
+                ("guile-bash" ,guile-bash)
+                ("guile-daemon" ,guile-daemon)
+                ("inetutils" ,inetutils)
+                ("jq" ,jq)
+                ("libxml2-xpath0" ,libxml2-xpath0)
+                ("netcat" ,netcat)
+                ("nmap" ,nmap)
+                ("pcre/bin" ,pcre "bin")
+                ("perl" ,perl)
+                ("php" ,php)
+                ("prips" ,prips)
+                ("python" ,python)
+                ("python-elementpath" ,python-elementpath)
+                ("python-lxml" ,python-lxml)
+                ("python-netaddr" ,python-netaddr)
+                ("python-yq" ,python-yq)
+                ("sed" ,sed)
+                ("socat" ,socat)
+                ("util-linux" ,util-linux)
+                ("which" ,which)
+                ("xdg-utils" ,xdg-utils)
+                ("yad" ,yad)))
+      (arguments
+       `(#:modules ((guix build utils))
+         #:builder
+         (begin
+           (use-modules (guix build utils))
+           (let* ((bashfull (assoc-ref %build-inputs "bash-full"))
+                  ;; Some guile libraries such as gnu bash will need
+                  ;; to be added to GUILE_LOAD_PATH
+                  (guile-bash (assoc-ref %build-inputs "guile-bash"))
+                  (g-bash-lib (string-append guile-bash
+                                             "/share/guile/site/" ,guilever))
+                  ;; Some python libraries needs added to PYTHONPATH
+                  (p-elementpath-lib (string-append
+                                      (assoc-ref %build-inputs "python-elementpath")
+                                      "/lib/python" ,pyver "/site-packages"))
+                  (p-lxml-lib (string-append
+                               (assoc-ref %build-inputs "python-lxml")
+                               "/lib/python" ,pyver "/site-packages"))
+                  (p-netaddr-lib (string-append
+                                  (assoc-ref %build-inputs "python-netaddr")
+                                  "/lib/python" ,pyver "/site-packages"))
+                  (p-lib (string-append
+                          (assoc-ref %build-inputs "python")
+                          "/lib/python" ,pyver "/site-packages"))
+                  (pylibsline (string-append
+                               p-elementpath-lib ":" p-lxml-lib
+                               ":" p-netaddr-lib ":" p-lib))
+                  (out (assoc-ref %outputs "out"))
+                  (bin (string-append out "/bin"))
+                  ;; Everything but bcu.sh itself is only accessed
+                  ;; internally by bcu so we put it in libexec.
+                  (libexec (string-append out "/libexec/bcu")))
+             (mkdir-p libexec)
+             (copy-recursively (assoc-ref %build-inputs "source") libexec)
+             ;; Create a bcu.sh wrapping script manually that ensures
+             ;; we prepend necessary PATHs.
+             (mkdir-p bin)
+             (let* ((binfile (string-append bin "/bcu.sh"))
+                    (bcu-port (open-file binfile "a"))
+                    (pathline (string-append
+                               bashfull "/bin"
+                               ":" (assoc-ref %build-inputs "bindutils") "/bin"
+                               ":" (assoc-ref %build-inputs "coreutils") "/bin"
+                               ":" (assoc-ref %build-inputs "ctypes.sh") "/bin"
+                               ":" (assoc-ref %build-inputs "curl") "/bin"
+                               ":" (assoc-ref %build-inputs "diffutils") "/bin"
+                               ":" (assoc-ref %build-inputs "ed") "/bin"
+                               ":" (assoc-ref %build-inputs "expect") "/bin"
+                               ":" (assoc-ref %build-inputs "find") "/bin"
+                               ":" (assoc-ref %build-inputs "gawk") "/bin"
+                               ":" (assoc-ref %build-inputs "grep") "/bin"
+                               ":" (assoc-ref %build-inputs "guile") "/bin"
+                               ":" (assoc-ref %build-inputs "inetutils") "/bin"
+                               ":" (assoc-ref %build-inputs "jq") "/bin"
+                               ":" (assoc-ref %build-inputs "libxml2-xpath0") "/bin"
+                               ":" (assoc-ref %build-inputs "netcat") "/bin"
+                               ":" (assoc-ref %build-inputs "nmap") "/bin"
+                               ":" (assoc-ref %build-inputs "pcre/bin") "/bin"
+                               ":" (assoc-ref %build-inputs "perl") "/bin"
+                               ":" (assoc-ref %build-inputs "php") "/bin"
+                               ":" (assoc-ref %build-inputs "prips") "/bin"
+                               ":" (assoc-ref %build-inputs "python") "/bin"
+                               ":" (assoc-ref %build-inputs "python-yq") "/bin"
+                               ":" (assoc-ref %build-inputs "sed") "/bin"
+                               ":" (assoc-ref %build-inputs "socat") "/bin"
+                               ":" (assoc-ref %build-inputs "util-linux") "/bin"
+                               ":" (assoc-ref %build-inputs "which") "/bin"
+                               ":" (assoc-ref %build-inputs "xdg-utils") "/bin"
+                               ":" (assoc-ref %build-inputs "yad") "/bin")))
+               (display (string-append "#!" bashfull "/bin/bash\n") bcu-port)
+               (display
+                (string-append
+                 "[[ \"$_BCU_SH_LOADED\" == YES ]] || { \nexport PATH=\""
+                 pathline "${PATH:+:}${PATH}\"\nexport PYTHONPATH=\""
+                 pylibsline "${PYTHONPATH:+:}${PYTHONPATH}\"\nexport GUILE_LOAD_PATH=\""
+                 g-bash-lib "${GUILE_LOAD_PATH:+:}${GUILE_LOAD_PATH}\"\n"
+                 ;; XDG_DATA_DIRS needs set for yad to load icons properly
+                 "[[ -e /run/current-system/profile/share ]] && export XDG_DATA_DIRS="
+                 "/run/current-system/profile/share${XDG_DATA_DIRS:+:}${XDG_DATA_DIRS}\n"
+                 ;; Ensure that the setuid version of ping is used
+                 "[[ -e /run/setuid-programs/ping ]] && "
+                 "ping(){ /run/setuid-programs/ping \"$@\" ; } && export -f ping\n"
+                 "[[ -e /run/setuid-programs/ping6 ]] && "
+                 "ping6(){ /run/setuid-programs/ping6 \"$@\" ; } && export -f ping6\n}\n")
+                bcu-port)
+               (display (string-append "source " libexec "/bcu.sh\n") bcu-port)
+               (close-port bcu-port)
+               (chmod binfile #o555)
+               (setenv "PATH" (string-append pathline ":" (getenv "PATH"))))
+             (for-each (lambda (file)
+                         (substitute* file
+                           (("~/\\.guix-profile/lib/bash/libguile-bash\\.so")
+                            (string-append guile-bash "/lib/bash/libguile-bash.so"))
+                           (("\"\\$GUIX_PROFILE\"/lib/bash/libguile-bash\\.so")
+                            (string-append guile-bash "/lib/bash/libguile-bash.so"))))
+                       (find-files out ".*\\.sh"))
+             (for-each (lambda (file)
+                         (patch-shebang file))
+                       (find-files out ".*\\.(sh|scm|awk|php|py)$"))
+             ;; Setup PATH for tests
+             (setenv "PATH" (string-append bin ":" (getenv "PATH")))
+             ;; Some tests need a HOME-directory
+             (setenv "HOME" "/tmp")
+             ;; Disable network tests, and all tests for setopts which
+             ;; don't work inside the Guix build environment
+             (call-with-output-file (string-append libexec "/disabled_tests.txt")
+               (lambda (port)
+                 (display (string-append
+                           "ip_of_test_1\nsetopts_test_1\nsetopts_test_2\nsetopts_test_3"
+                           "\nsetopts_test_4\nsetopts_test_5\nsetopts_test_6\n")
+                          port)))
+             (invoke (string-append libexec "/bcu-test.sh"))))))
+      (build-system trivial-build-system)
+      (synopsis "Bash functions and tools for software prototyping in Bash")
+      (description
+       (string-append
+        "Bash-bcu contains bash functions and wrappers that can be useful when"
+        " writing quick implementations of new programs.  It helps you work with"
+        " JSON, XML, parallelization and installs some commonly used \"helper\""
+        " programs used in Bash scripting.  Just run @command{. bcu.sh}, type "
+        "@command{bcu__}, hit @command{TAB} to see available functions and give"
+        " any of them the @command{ --help} flag to see how to use it, or run "
+        "@command{bcu__docs} for the full html documentation."))
+      (license license:gpl3))))
-- 
2.31.0


             reply	other threads:[~2021-10-30 15:00 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-30 14:59 david larsson [this message]
2021-11-07 12:40 ` [bug#51512] [PATCH]: gnu: Add bash-bcu 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     ` [bug#51512] [PATCH v 3]: " david larsson
2022-08-02 20:21       ` 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=3add15b77522d6e9ebd715a19d966666@selfhosted.xyz \
    --to=david.larsson@selfhosted.xyz \
    --cc=51512@debbugs.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).