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")))
c741'>gnu: belcard: Update to 4.4.34 and enable tests....* gnu/packages/linphone.scm (belcard)[source]: Switch to git repository. [version]: Update to 4.4.34. [outputs]: Add the tester and debug outputs. [arguments]: Enable tests. [phases]{patch-vcard-grammar-location, install-tester, check}: New phases. Co-authored-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Raghav Gururajan 2021-03-29gnu: belr: Update to 4.4.34 and enable tests....* gnu/packages/linphone.scm (belr)[source]: Switch to git repository. [version]: Update to 4.4.34. [arguments]: Remove the tests? argument to enable tests. [phases]{move-tester, check}: New phases. Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Raghav Gururajan 2021-03-29gnu: bctoolbox: Update to 4.4.34 and enable libdecaf, tests....* gnu/packages/linphone.scm (bctoolbox)[version]: Update to 4.4.34. [source]: Switch to git repository. [outputs]: Add a debug output. [arguments]: Remove tests? argument, enabling tests. [phases]{patch-cmake, skip-problematic-tests} {fix-installed-resource-directory-detection}: New phases. {check}: Override phase. [inputs]: Add libdecaf. [license]: Update to GPLv3+. Co-authored-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Raghav Gururajan 2021-03-26gnu: bcmatroska2: Fetch the sources from git....* gnu/packages/linphone.scm (bcmatroska2)[source]: Fetch sources from git. [description]: Expound description. [license]: Add the gpl2+ license to the list. Remove broken URLs. Raghav Gururajan 2021-03-26gnu: bcg729: Enable tests and update home page, license....* gnu/packages/linphone.scm (bcg729)[source]: Remove '.git' suffix from URL. [tests?]: Remove argument. [configure-flags]: Enable tests. [phases]{copy-inputs}: New phase. {check}: Override. [native-inputs]: Add perl, test-patterns and unzip. [home-page]: Update. [license]: Upgrade to GPLv3+. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Raghav Gururajan 2021-03-24gnu: bcunit: Update to 3.0.2-0.74021cc and enable more features....* gnu/packages/linphone.scm (bcunit)[source]: Switch to git repository. [version]: Update to 3.0.2-0.74021cc. [outputs]: Add a "doc" output. [arguments]: Remove the tests? argument, enabling tests. [configure-flags]: Enable curses, doc, examples, tests and memtrace. [phases]{patch-source, move-doc}: New phases. {check}: Override phase. [inputs]: Add ncurses. [description]: Fix typo. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Raghav Gururajan 2020-11-26gnu: bcg729: Update to 1.1.1....* gnu/packages/linphone.scm (bcg729): Update to 1.1.1. Tobias Geerinckx-Rice 2020-11-26gnu: bcg729: Fetch from git repository....* gnu/packages/linphone.scm (bcg729)[source]: Use GIT-FETCH and GIT-FILE-NAME. Tobias Geerinckx-Rice 2020-09-30gnu: Fix package references....* gnu/packages/algebra.scm (iml)[inputs]: Correctly refer to package inputs. * gnu/packages/astronomy.scm (xplanet), * gnu/packages/audio.scm (redkite, libaudec, lv2lint, lv2toweb), * gnu/packages/bioconductor.scm (r-cummerbund), * gnu/packages/chicken.scm (chicken), * gnu/packages/conky.scm (conky), * gnu/packages/cran.scm (r-latex2exp), * gnu/packages/crates-io.scm (rust-rgb), * gnu/packages/databases.scm (mariadb), * gnu/packages/diffoscope.scm (reprotest), * gnu/packages/file-systems.scm (glusterfs), * gnu/packages/finance.scm (electron-cash), * gnu/packages/games.scm (rinutils, ksudoku, kdiamond, kigo), * gnu/packages/geo.scm (grass), * gnu/packages/gnome.scm (libmediaart, gnome-contacts, geoclue), * gnu/packages/gnucash.scm (aqbanking), * gnu/packages/image.scm (mtpaint), * gnu/packages/kde-internet.scm (kopete, ktorrent), * gnu/packages/kde-utils.scm (kmousetool, kmouth, kronometer), * gnu/packages/linphone.scm (liblinphone), * gnu/packages/maths.scm (ppl), * gnu/packages/mercury.scm (mercury-minimal), * gnu/packages/music.scm (bjumblr, bschaffl, lsp-plugins, spectacle-analyzer, helm, tap-lv2, wolf-shaper, shiru-lv2), * gnu/packages/networking.scm (restinio), * gnu/packages/prolog.scm (swi-prolog), * gnu/packages/python-web.scm (gunicorn), * gnu/packages/python-xyz.scm (python-docusign-esign), * gnu/packages/ruby.scm (ruby-cucumber, ruby_version, ruby-addressable), * gnu/packages/sagemath.scm (python-cypari2), * gnu/packages/skarnet.scm (s6-linux-init), * gnu/packages/vpn.scm (sshuttle), * gnu/packages/web.scm (libcyaml), * gnu/packages/xdisorg.scm (kbdd), * gnu/packages/xorg.scm (xpra): Same. Efraim Flashner 2020-09-04gnu: liblinphone: Add installation of man pages....* gnu/packages/linphone.scm (liblinphone)[arguments]: Add phase 'install-man-pages. Signed-off-by: Mathieu Othacehe <othacehe@gnu.org> Michael Rohleder an class='msg-tooltip'>* gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.10-arm64.conf, gnu/packages/aux-files/linux-libre/5.10-i686.conf, gnu/packages/aux-files/linux-libre/5.10-x86_64.conf: Update for 5.10.13. Leo Famulari 2021-02-03build/python: Handle FileNotFoundError exception in sanity-check.py....This exception was thrown while running the sanity-check on the python-isort package, which doesn't make use of a setuptools-based build system but rather of a PEP 517 compliant one. * gnu/packages/aux-files/python/sanity-check.py: Handle the FileNotFoundError whe attempting to read the 'top_level.txt' metadata file of the package. Remove extraneous 'continue' statement. Maxim Cournoyer 2021-02-03gnu: Remove leftover kernel configurations for linux-libre 5.9....This is a followup to commit 8727870ff4e4d5016431985a888f3ca589d81e02. * gnu/packages/aux-files/linux-libre/5.9-arm.conf, gnu/packages/aux-files/linux-libre/5.9-arm64.conf, gnu/packages/aux-files/linux-libre/5.9-i686.conf, gnu/packages/aux-files/linux-libre/5.9-x86_64.conf: Delete files. * Makefile.am (AUX_FILES): Remove them. Leo Famulari 2021-02-01build/python: Add a sanity check phase....Add a new phase validating the usability of installed Python packages. * gnu/packages/aux-files/python/sanity-check.py: New file. * Makefile.am (AUX_FILES): Register it. * guix/build-system/python.scm (sanity-check.py): New variable. (lower): Add the script as an implicit input. * guix/build/python-build-system.scm: Remove trailing #t. (sanity-check): New phase. (%standard-phases): Use it. * tests/builders.scm: (make-python-dummy) (dummy-ok, dummy-dummy-nosetuptools, dummy-fail-requirements) (dummy-fail-import, dummy-fail-console-script): New variables. ("python-build-system: dummy-ok") ("python-build-system: dummy-dummy-nosetuptools") ("python-build-system: dummy-fail-requirements") ("python-build-system: dummy-fail-import") ("python-build-system: dummy-fail-console-script"): Add tests. Lars-Dominik Braun 2021-02-01gnu: python: Replace PYTHONPATH by GUIX_PYTHONPATH....Using PYTHONPATH as a mean to discover the Python packages had the following issues: 1. It is not versioned, so different versions of Python would clash if installed in a shared profile. 2. It would interfere with the host Python site on foreign distributions, sometimes preventing a a user to login their GDM session (!). 3. It would take precedence over user installed Python packages installed through pip. 4. It would leak into Python virtualenvs, which are supposed to create isolated Python environments. This changes fixes the above issues by making use of a sitecustomize.py module. The newly introduced GUIX_PYTHONPATH environment variable is read from the environment, filtered for the current Python version of the interpreter, and spliced in 'sys.path' just before Python's own site location, which provides the expected behavior. * gnu/packages/aux-files/python/sitecustomize.py: New file. * Makefile.am: Register it. * gnu/packages/python.scm (customize-site) (guix-pythonpath-search-path): New procedures. (python-2.7)[phases]{install-sitecustomize.py}: New phase. [native-inputs]{sitecustomize.py}: New input. [native-search-paths]: Replace PYTHONPATH with GUIX_PYTHONPATH. (python-3.9)[native-search-paths]: Likewise. [phases]{install-sitecustomize}: Override with correct version. [native-search-paths]: Replace PYTHONPATH with GUIX_PYTHONPATH. * gnu/packages/commencement.scm (python-boot0): [phases]{install-sitecustomize}: Likewise. [native-inputs]{sitecustomize.py}: New input. [native-search-paths]: Replace PYTHONPATH with GUIX_PYTHONPATH. * guix/build/python-build-system.scm (site-packages): Do not add a trailing '/'. squash! gnu: python: Replace PYTHONPATH by GUIX_PYTHONPATH. Maxim Cournoyer 2020-12-20gnu: vim: Automatically find vim plugins....* gnu/packages/vim.scm (vim)[arguments]: Add new 'install-guix.vim phase to install vendor specific vimrc. * gnu/packages/aux-files/guix.vim: New file. * Makefile.am (AUX_FILES): Register it. Efraim Flashner 2020-12-19gnu: linux-libre: Update to 5.10.1....* gnu/packages/aux-files/linux-libre/5.10-arm.conf, gnu/packages/aux-files/linux-libre/5.10-arm64.conf, gnu/packages/aux-files/linux-libre/5.10-i686.conf, gnu/packages/aux-files/linux-libre/5.10-x86_64.conf: New files. * Makefile.am (AUX_FILES): Add them. * gnu/packages/linux.scm (linux-libre-5.10-version, deblob-scripts-5.10, linux-libre-5.10-pristine-source, linux-libre-5.10-source, linux-libre-headers-5.10, linux-libre-5.10): New variables. (linux-libre-version, linux-libre-pristine-source, linux-libre-source, linux-libre, linux-libre-with-bpf): Update to 5.10.1. Leo Famulari 2020-12-11guix: 'guile' executable ignores GUILE_LOAD_PATH during startup....When starting the 'guix' command, this ensures Guile modules are immediately found instead of being search for in other directories. This reduces the number of 'stat' calls during startup when GUILE_LOAD_PATH is set to (almost) that of "env -i $(type -P guix)". * gnu/packages/aux-files/guile-launcher.c (load_path) (load_compiled_path): New variables. (inner_main): Restore GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and set %load-path and %load-compiled-path accordingly. (main): Save GUILE_LOAD_PATH and GUILE_LOAD_COMPILED_PATH and unset them. Ludovic Courtès