aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2012-2016, 2023 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2018, 2022-2024 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 bison)
  #: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.3.0")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/gawk/gawk-" version
                                ".tar.xz"))
            (sha256
             (base32 "02x97iyl9v84as4rkdrrkfk2j4vy4r3hpp3rkp3gh3qxs79id76a"))))
   (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")))))))))

   ;; Tests explicitly require en_US.UTF-8, fr_FR.UTF-8, ru_RU.UTF-8 and
   ;; ja_JP.UTF-8.
   (native-inputs (list (libc-utf8-locales-for-target)))

   (inputs (list libsigsegv
                 ;; Use the full-fledged Bash package, otherwise the test suite
                 ;; sometimes fail non-deterministically.
                 bash))

   (search-paths
    (list (search-path-specification
           (variable "AWKPATH")
           (files (list "share/awk")))
          (search-path-specification
           (variable "AWKLIBPATH")
           (files (list "lib/gawk")))))
   (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-20240905")
    (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
                "1q4rfcv7ppfw4fra8hp8z0s4qnsv1x598ny4xwb026zsgn96g6d3"))
              (modules '((guix build utils)))
              (snippet
               '(begin
                  ;; Delete file generated by bison.
                  (delete-file "parse.c")
                  ;; Prevent tests from hard coding PATH to a bogus value.
                  (substitute* '("test/mawktest" "test/fpe_test")
                    (("^PATH=.*")
                     ""))))))
    (build-system gnu-build-system)
    (arguments
     (list #:parallel-build? #f))   ; Prevent a race condition.
    (native-inputs
     (list bison))
    (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/sh") (which "sh"))
               (("/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")))
             (substitute* '("runtests"
                            "testdir/testawk"
                            "testdir/testcpp"
                            "testdir/testdel")
               (("/bin/sh") (which "sh")))
             (substitute* "testsuite.awk"
               (("/usr/bin/awk") (which "awk")))))
         (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 'fix-awk-paths '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 "Wrapper script that adds C preprocessing to Enhanced GNU Awk")))
lass='msg-avail'>...* gnu/system/install.scm (%installation-services)[gc-root-service-type]: Add GC root for GUILE-3.0 instead of GUILE-2.2. Marius Bakke 2020-04-15Merge branch 'master' into core-updatesMarius Bakke 2020-04-14installer: Only load uvesafb kernel module when needed....This is a follow-up to commit 557e6820a77b24f8f3f03f28ee473137b1caeb64. * gnu/system/install.scm (uvesafb-shepherd-service): Check that /dev/fb0 is not already present. Florian Pelz 2020-04-11installer: Load uvesafb kernel module....Fixes <https://bugs.gnu.org/40538>. Machines without Kernel Mode Setting (those with many old and current AMD GPUs, SiS GPUs, …) need uvesafb to show the GUI installer. Some may also need a kernel parameter like nomodeset or vga=793, but we leave that for the user to specify in GRUB. * gnu/system/install.scm (uvesafb-shepherd-service): New procedure. (uvesafb-service-type): New variable. (%installation-services): Add it. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Florian Pelz 2020-02-11system: Stop using canonical-package....Usage of canonical-package outside of thunked fields breaks cross-compilation, see: https://lists.gnu.org/archive/html/guix-devel/2019-12/msg00410.html. * gnu/installer.scm (installer-program): Remove canonical-package. * gnu/services/base.scm (<nscd-cache>): Ditto, (%base-services): ditto. * gnu/services/xorg.scm: Remove useless canonical-package import. * gnu/system.scm (%base-packages): Remove canonical-package. * gnu/system/install.scm (%installation-services): Ditto, (installation-os): ditto. * gnu/system/locale.scm (single-locale-directory): Ditto. Mathieu Othacehe 2020-01-03install: Add jfsutils to the installation image....* gnu/system/install.scm (installation-os)[packages]: Add jfsutils. Tobias Geerinckx-Rice 2019-12-01install: Pass 'local-file' literal strings for proper resolution....This is a followup to 99c45877a984dd0148151b2e304afef6fb04f1a5, which introduced a regression: "guix system build gnu/system/install.scm" would fail to find the .tmpl files. * gnu/system/install.scm (/etc/configuration-files)[file]: Remove. [directory]: Use 'local-file' with a literal string. Ludovic Courtès 2019-10-18gnu: Add u-boot-firefly-rk3399....* gnu/packages/bootloaders (u-boot-firefly-rk3399): New variable. * gnu/bootloader/u-boot (install-firefly-rk3399-u-boot): New variable. (u-boot-firefly-rk3399-bootloader): New variable. * gnu/system/install (define firefly-rk3399-installation-os): New variable. Vagrant Cascadian 2019-10-18gnu: Add u-boot-rock64-rk3328....* gnu/packages/bootloaders (u-boot-rock64-rk3328): New variable. * gnu/bootloader/u-boot (install-rock64-rk3328-u-boot): New variable. (u-boot-rock64-rk3328-bootloader): New variable. * gnu/system/install (define rock64-installation-os): New variable. Vagrant Cascadian 2019-10-18gnu: Add u-boot-rockpro64-rk3399...* gnu/packages/bootloaders.scm (u-boot-rockpro64-rk3399): New exported variable. (u-boot-2019.10): New variable. * gnu/bootloader/u-boot.scm (u-boot-rockpro64-rk3399-bootloader): New exported variable. (install-rockpro64-rk3399-u-boot): New variable. * gnu/system/install.scm (rockpro64-installation-os): New exported variable. Adjusted-by: Vagrant Cascadian <vagrant@debian.org> Signed-off-by: Caliph Nomble <nomble@palism.com> Signed-off-by: Vagrant Cascadian <vagrant@debian.org> Caliph Nomble