summaryrefslogtreecommitdiff
path: root/gnu/packages/gawk.scm
diff options
context:
space:
mode:
authorPaul A. Patience <paul@apatience.com>2022-07-04 04:59:36 +0000
committerLudovic Courtès <ludo@gnu.org>2022-07-08 17:36:51 +0200
commite07fa9b04009f0b239931674e1a48536a52e3276 (patch)
tree83a2642c6403a256dd2eedb47e2512ab7afe9fc9 /gnu/packages/gawk.scm
parent1fed71ce1976db9edf95fc4b99cac75a281fb526 (diff)
gnu: Add cppawk and cppawk-egawk.
* gnu/packages/gawk.scm (cppawk, cppawk-egawk): New variables. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'gnu/packages/gawk.scm')
-rw-r--r--gnu/packages/gawk.scm85
1 files changed, 85 insertions, 0 deletions
diff --git a/gnu/packages/gawk.scm b/gnu/packages/gawk.scm
index 6b905f6654..9feaf059fb 100644
--- a/gnu/packages/gawk.scm
+++ b/gnu/packages/gawk.scm
@@ -23,12 +23,16 @@
(define-module (gnu packages gawk)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
+ #:use-module (gnu packages base)
#:use-module (gnu packages bash)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages libsigsegv)
#:use-module (gnu packages multiprecision)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix utils)
+ #:use-module (guix build-system copy)
#:use-module (guix build-system gnu))
(define-public gawk
@@ -160,3 +164,84 @@ block-scoped lexical variables."))))
This version aims to be smaller and faster than GNU Awk, at the expense
of fewer features and extensions.")
(license license:gpl2))) ;version 2 only
+
+(define-public cppawk
+ (package
+ (name "cppawk")
+ (version "20220703")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://www.kylheku.com/git/cppawk")
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0b09757q81sz4gn62k3mv5bgllyb2v5m64346s8fc99mqqif70cx"))))
+ (build-system copy-build-system)
+ (arguments
+ `(#:install-plan '(("bin/cppawk" "bin/cppawk")
+ ("share/cppawk/include" "share/cppawk/include")
+ ("./" "share/man/man1" #:include-regexp (".*\\.1$")))
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'fix-paths
+ (lambda _
+ (substitute* "bin/cppawk"
+ (("/bin/bash") (which "bash"))
+ (("dirname") (which "dirname"))
+ (("mktemp") (which "mktemp"))
+ ;; Extra space to prevent matching Awk's printf.
+ (("printf ") (string-append (which "printf") " "))
+ (("rm -f") (string-append (which "rm") " -f"))
+ (("prepro=cpp") (string-append "prepro=" (which "cpp")))
+ (("sed -e") (string-append (which "sed") " -e")))))
+ (add-after 'fix-paths 'fix-awk-paths
+ (lambda _
+ (substitute* "bin/cppawk"
+ (("awk=gawk") (string-append "awk=" (which "gawk")))
+ (("awk '") (string-append (which "gawk") " '")))))
+ (add-after 'build 'check
+ (lambda _
+ (invoke "./runtests"))))))
+ (native-inputs
+ ;; For tests
+ (list mawk))
+ (inputs
+ (list coreutils ; For dirname, mktemp, printf, rm
+ gawk-mpfr ; Default variant, but supports others
+ gcc ; For cpp
+ sed))
+ (home-page "https://www.kylheku.com/cgit/cppawk/")
+ (synopsis "Wrapper script that adds C preprocessing to Awk")
+ (description
+ "@command{cppawk} is a shell script that invokes the C preprocessor
+(@command{cpp}) on Awk code and calls Awk (by default GNU Awk) on the result.
+
+@command{cppawk} understands the basic Awk options like @option{-F} and
+@option{-v}, and also understands common @command{cpp} options like
+@option{-I} and @option{-Dmacro=value}.
+
+@command{cppawk} has no dependencies beyond Awk, @command{cpp}, @command{sed}
+and some GNU core utilities (including @command{printf}). Preprocessed
+programs can be captured and transferred to systems that have Awk but not
+@command{cpp} or @command{cppawk}.")
+ (license license:bsd-2)))
+
+(define-public cppawk-egawk
+ (package/inherit cppawk
+ (name "cppawk-egawk")
+ (arguments
+ (substitute-keyword-arguments (package-arguments cppawk)
+ ((#:phases phases)
+ `(modify-phases ,phases
+ (replace 'fix-awk-paths
+ (lambda _
+ (substitute* "bin/cppawk"
+ (("awk=gawk") (string-append "awk=" (which "egawk")))
+ (("awk '") (string-append (which "egawk") " '")))))))))
+ (inputs
+ (modify-inputs (package-inputs cppawk)
+ (delete "gawk-mpfr")
+ (prepend egawk-next)))
+ (synopsis "cppawk that calls Enhanced GNU Awk by default")))