238 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			238 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
;;; GNU Guix --- Functional package management for GNU
 | 
						|
;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 | 
						|
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 | 
						|
;;; Copyright © 2018, 2022 Efraim Flashner <efraim@flashner.co.il>
 | 
						|
;;; Copyright © 2021, 2022 Marius Bakke <marius@gnu.org>
 | 
						|
;;; Copyright © 2022 Paul A. Patience <paul@apatience.com>
 | 
						|
;;;
 | 
						|
;;; This file is part of GNU Guix.
 | 
						|
;;;
 | 
						|
;;; GNU Guix is free software; you can redistribute it and/or modify it
 | 
						|
;;; under the terms of the GNU General Public License as published by
 | 
						|
;;; the Free Software Foundation; either version 3 of the License, or (at
 | 
						|
;;; your option) any later version.
 | 
						|
;;;
 | 
						|
;;; GNU Guix is distributed in the hope that it will be useful, but
 | 
						|
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
;;; GNU General Public License for more details.
 | 
						|
;;;
 | 
						|
;;; You should have received a copy of the GNU General Public License
 | 
						|
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 | 
						|
(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 gexp)
 | 
						|
  #: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
 | 
						|
  (package
 | 
						|
   (name "gawk")
 | 
						|
   (version "5.2.1")
 | 
						|
   (source (origin
 | 
						|
            (method url-fetch)
 | 
						|
            (uri (string-append "mirror://gnu/gawk/gawk-" version
 | 
						|
                                ".tar.xz"))
 | 
						|
            (sha256
 | 
						|
             (base32 "0kvy78jdv6lww1s6y2jm1w2cj46mz1fhflgdj9bwq64y3ywm6db7"))))
 | 
						|
   (build-system gnu-build-system)
 | 
						|
   (arguments
 | 
						|
    (list #:phases
 | 
						|
          #~(modify-phases %standard-phases
 | 
						|
              (add-before 'configure 'set-shell-file-name
 | 
						|
                (lambda* (#:key inputs #:allow-other-keys)
 | 
						|
                  ;; Refer to the right shell.
 | 
						|
                  (let ((/bin/sh (search-input-file inputs "bin/sh")))
 | 
						|
                    (substitute* "io.c"
 | 
						|
                      (("/bin/sh") /bin/sh))
 | 
						|
 | 
						|
                    ;; When cross-compiling, remove dependencies on the
 | 
						|
                    ;; `check-for-shared-lib-support' target, which tries
 | 
						|
                    ;; to run the cross-built `gawk'.
 | 
						|
                    #$@(if (%current-target-system)
 | 
						|
                           '((substitute* "extension/Makefile.in"
 | 
						|
                                 (("^.*: check-for-shared-lib-support" match)
 | 
						|
                                  (string-append "### " match))))
 | 
						|
                           '()))))
 | 
						|
 | 
						|
              (add-before 'check 'adjust-test-infrastructure
 | 
						|
                (lambda _
 | 
						|
                  ;; Remove dependency on 'more' (from util-linux), which
 | 
						|
                  ;; would needlessly complicate bootstrapping.
 | 
						|
                  (substitute* "test/Makefile"
 | 
						|
                    (("\\| more") ""))
 | 
						|
 | 
						|
                  ;; Adjust the shebang in that file since it is then diff'd
 | 
						|
                  ;; against the actual test output.
 | 
						|
                  (substitute* "test/watchpoint1.ok"
 | 
						|
                    (("#! /usr/bin/gawk")
 | 
						|
                     (string-append "#!" (which "gawk")))))))))
 | 
						|
 | 
						|
   (inputs (list libsigsegv
 | 
						|
                 ;; Use the full-fledged Bash package, otherwise the test suite
 | 
						|
                 ;; sometimes fail non-deterministically.
 | 
						|
                 bash))
 | 
						|
 | 
						|
   (home-page "https://www.gnu.org/software/gawk/")
 | 
						|
   (synopsis "Text scanning and processing language")
 | 
						|
   (description
 | 
						|
    "Gawk is the GNU implementation of Awk, a specialized programming
 | 
						|
language for the easy manipulation of formatted text, such as tables of data.
 | 
						|
Gawk features many extensions beyond the traditional implementation,
 | 
						|
including network access, sorting, and large libraries.")
 | 
						|
   (license license:gpl3+)))
 | 
						|
 | 
						|
;; Separate from gawk to facilitate bootstrapping.
 | 
						|
(define-public gawk-mpfr
 | 
						|
  (package/inherit gawk
 | 
						|
    (name "gawk-mpfr")
 | 
						|
    (inputs
 | 
						|
     (modify-inputs (package-inputs gawk)
 | 
						|
       (prepend mpfr)))))
 | 
						|
 | 
						|
;; Suffixed with -next because, similarly to Emacs, development versions are
 | 
						|
;; numbered x.y.60+z, and also there are no tagged versions of egawk yet.
 | 
						|
;; (However, though egawk's --version lists 5.1.60, it is actually forked from
 | 
						|
;; a development version of gawk 5.1.1.)
 | 
						|
(define-public egawk-next
 | 
						|
  (let ((commit "f00e74ffc73f6ba6fe74fb7a26319770b8c3792c")
 | 
						|
        (revision "0"))
 | 
						|
    (package
 | 
						|
      (inherit gawk-mpfr)
 | 
						|
      (name "egawk-next")
 | 
						|
      (version (git-version "5.1.60" revision commit))
 | 
						|
      (source
 | 
						|
       (origin
 | 
						|
         (method git-fetch)
 | 
						|
         (uri (git-reference
 | 
						|
               (url "https://www.kylheku.com/git/egawk")
 | 
						|
               (commit commit)))
 | 
						|
         (file-name (git-file-name name version))
 | 
						|
         (sha256
 | 
						|
          (base32 "0bmfbw6k1aiyiardnk7ha5zlpkvavj013mm4n7wwj2vdcgrs6p1f"))))
 | 
						|
      (home-page "https://www.kylheku.com/cgit/egawk/")
 | 
						|
      (synopsis "Enhanced GNU Awk")
 | 
						|
      (description
 | 
						|
       "@command{egawk} is Enhanced GNU Awk.  It is a fork of GNU Awk with
 | 
						|
some enhancements designed and implemented by Kaz Kylheku.  In particular,
 | 
						|
Enhanced GNU Awk provides the @code{@@let} statement for declaring
 | 
						|
block-scoped lexical variables."))))
 | 
						|
 | 
						|
(define-public mawk
 | 
						|
  (package
 | 
						|
    (name "mawk")
 | 
						|
    (version "1.3.4-20200120")
 | 
						|
    (home-page "https://invisible-island.net/mawk/mawk.html")
 | 
						|
    (source (origin
 | 
						|
              (method url-fetch)
 | 
						|
              (uri (string-append "https://invisible-mirror.net/archives/mawk"
 | 
						|
                                  "/mawk-" version ".tgz"))
 | 
						|
              (sha256
 | 
						|
               (base32
 | 
						|
                "0dw2icf8bnqd9y0clfd9pkcxz4b2phdihwci13z914mf3wgcvm3z"))
 | 
						|
              (modules '((guix build utils)))
 | 
						|
              (snippet
 | 
						|
               '(begin
 | 
						|
                  ;; Prevent tests from hard coding PATH to a bogus value.
 | 
						|
                  (substitute* '("test/mawktest" "test/fpe_test")
 | 
						|
                    (("^PATH=.*")
 | 
						|
                     ""))))))
 | 
						|
    (build-system gnu-build-system)
 | 
						|
    (synopsis "Text scanning and processing language")
 | 
						|
    (description
 | 
						|
     "@command{mawk} is an interpreter for the Awk programming language.
 | 
						|
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")))
 |