gnu: r-rcpparmadillo: Update to 0.9.900.3.0.
[jackhill/guix/guix.git] / gnu / packages / shells.scm
index 1900925..7868dc4 100644 (file)
@@ -3,14 +3,19 @@
 ;;; Copyright © 2014, 2015 David Thompson <davet@gnu.org>
 ;;; Copyright © 2014 Kevin Lemonnier <lemonnierk@ulrar.net>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
-;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2016 Stefan Reichör <stefan@xsteve.at>
 ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2017, 2018 ng0 <ng0@n0.is>
+;;; Copyright © 2017, 2018 Nikita <nikita@n0.is>
 ;;; Copyright © 2017, 2018 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Meiyo Peng <meiyo.peng@gmail.com>
 ;;; Copyright © 2019 Timothy Sample <samplet@ngyro.com>
+;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019, 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2020 Ryan Prior <rprior@protonmail.com>
+;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -38,6 +43,7 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages libbsd)
   #:use-module (gnu packages libedit)
+  #:use-module (gnu packages linux)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages scheme)
+  #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
   #:use-module (guix git-download)
   #:use-module (guix licenses)
-  #:use-module (guix packages))
+  #:use-module (guix packages)
+  #:use-module (guix utils))
 
 (define-public dash
   (package
     (name "dash")
-    (version "0.5.10.2")
+    (version "0.5.11.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://gondor.apana.org.au/~herbert/dash/files/"
                            "dash-" version ".tar.gz"))
        (sha256
-        (base32
-         "0wb0bwmqc661hylqcfdp7l7x12myw3vpqk513ncyqrjwvhckjriw"))
+        (base32 "0pvdpm1cgfbc25ramn4305a0158yq031q1ain4dc972rnxl7vyq0"))
        (modules '((guix build utils)))
        (snippet
         '(begin
@@ -93,46 +100,72 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
 (define-public fish
   (package
     (name "fish")
-    (version "3.0.2")
+    (version "3.1.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://github.com/fish-shell/fish-shell/"
                            "releases/download/" version "/"
-                           name "-" version ".tar.gz"))
+                           "fish-" version ".tar.gz"))
        (sha256
-        (base32 "03j3jl9jzlnhq4p86zj8wqsh5sx45j1d1fvfa80ks1cfdg68qwhl"))))
-    (build-system gnu-build-system)
+        (base32 "1vblmb3x2k2cb0db5jdyflppnlqsm7i6jjaidyhmvaaw7ch2gffm"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           (delete-file-recursively "pcre2-10.32") #t))))
+    (build-system cmake-build-system)
     (inputs
      `(("fish-foreign-env" ,fish-foreign-env)
-       ("groff" ,groff)                 ; for 'fish --help'
        ("ncurses" ,ncurses)
        ("pcre2" ,pcre2)      ; don't use the bundled PCRE2
        ("python" ,python)))  ; for fish_config and manpage completions
     (native-inputs
-     `(("doxygen" ,doxygen)))
+     `(("doxygen" ,doxygen)
+       ; for 'fish --help'
+       ("groff" ,groff)))
     (arguments
-     '(#:tests? #f                      ; no check target
-       #:phases
+     '(#:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-source
+         (add-after 'unpack 'set-env
            (lambda _
-             (substitute* '("build_tools/build_commands_hdr.sh"
-                            "build_tools/build_user_doc.sh")
-               (("/usr/bin/env") "env"))
-             #t))
-         ;; Embed absolute paths.
-         (add-before 'install 'embed-absolute-paths
-           (lambda _
-             (substitute* '("share/functions/__fish_config_interactive.fish"
-                            "share/functions/fish_config.fish"
-                            "share/functions/fish_update_completions.fish")
-               (("python3") (which "python3")))
-             (substitute* "share/functions/__fish_print_help.fish"
-               (("nroff") (which "nroff")))
+             ;; some tests write to $HOME
+             (setenv "HOME" (getcwd))
              #t))
+         (add-after 'unpack 'patch-tests
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((coreutils (assoc-ref inputs "coreutils"))
+                   (bash (assoc-ref inputs "bash")))
+               ;; This test fails
+               (delete-file "tests/checks/pipeline-pgroup.fish")
+               ;; These try to open a terminal
+               (delete-file "tests/checks/interactive.fish")
+               (delete-file "tests/checks/login-interactive.fish")
+               ;; These contain absolute path references
+               (substitute* "src/fish_tests.cpp"
+                 (("/bin/echo" echo) (string-append coreutils echo))
+                 (("/bin/ca" ca) (string-append coreutils ca))
+                 (("\"(/bin/c)\"" _ c) (string-append "\"" coreutils c "\""))
+                 (("/bin/ls_not_a_path" ls-not-a-path)
+                  (string-append coreutils ls-not-a-path))
+                 (("/bin/ls" ls) (string-append coreutils ls))
+                 (("(/bin/)\"" _ bin) (string-append coreutils bin "\""))
+                 (("/bin -" bin) (string-append coreutils bin))
+                 (((string-append
+                    "do_test\\(is_potential_path\\("
+                    "L\"/usr\", wds, vars, PATH_REQUIRE_DIR\\)\\);"))
+                  ""))
+               (substitute*
+                 (append (find-files "tests" ".*\\.(in|out|err)$")
+                         (find-files "tests/checks" ".*\\.fish"))
+                 (("/bin/pwd" pwd) (string-append coreutils pwd))
+                 (("/bin/echo" echo) (string-append coreutils echo))
+                 (("/bin/sh" sh) (string-append bash sh))
+                 (("/bin/ls" ls) (string-append coreutils ls)))
+               (substitute* (find-files "tests" ".*\\.(in|out|err)$")
+                 (("/usr/bin") (string-append coreutils "/bin")))
+               #t)))
          ;; Source /etc/fish/config.fish from $__fish_sysconf_dir/config.fish.
-         (add-before 'install 'patch-fish-config
+         (add-after 'patch-tests 'patch-fish-config
            (lambda _
              (let ((port (open-file "etc/config.fish" "a")))
                (display (string-append
@@ -145,6 +178,12 @@ direct descendant of NetBSD's Almquist Shell (@command{ash}).")
                         port)
                (close-port port))
              #t))
+         ;; Embed absolute paths.
+         (add-before 'install 'embed-absolute-paths
+           (lambda _
+             (substitute* "share/functions/__fish_print_help.fish"
+               (("nroff") (which "nroff")))
+             #t))
          ;; Enable completions, functions and configurations in user's and
          ;; system's guix profiles by adding them to __extra_* variables.
          (add-before 'install 'patch-fish-extra-paths
@@ -214,7 +253,7 @@ and syntax highlighting.")
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/oh-my-fish/plugin-foreign-env.git")
+             (url "https://github.com/oh-my-fish/plugin-foreign-env")
              (commit "dddd9213272a0ab848d474d0cbde12ad034e65bc")))
        (file-name (git-file-name name version))
        (sha256
@@ -261,7 +300,7 @@ into fish.")
     (source (origin
               (method git-fetch)
               (uri (git-reference
-                    (url "https://github.com/rakitzis/rc.git")
+                    (url "https://github.com/rakitzis/rc")
                     (commit (string-append "v" version))))
               (sha256
                (base32
@@ -333,7 +372,7 @@ written by Paul Haahr and Byron Rakitzis.")
 (define-public tcsh
   (package
     (name "tcsh")
-    (version "6.20.00")
+    (version "6.22.02")
     (source (origin
               (method url-fetch)
               ;; Old tarballs are moved to old/.
@@ -343,9 +382,8 @@ written by Paul Haahr and Byron Rakitzis.")
                                         "old/tcsh-" version ".tar.gz")))
               (sha256
                (base32
-                "17ggxkkn5skl0v1x0j6hbv5l0sgnidfzwv16992sqkdm983fg7dq"))
-              (patches (search-patches "tcsh-fix-autotest.patch"
-                                       "tcsh-fix-out-of-bounds-read.patch"))
+                "0nw8prz1n0lmr82wnpyhrzmki630afn7p9cfgr3vl00vr9c72a7d"))
+              (patches (search-patches "tcsh-fix-autotest.patch"))
               (patch-flags '("-p0"))))
     (build-system gnu-build-system)
     (native-inputs
@@ -356,6 +394,14 @@ written by Paul Haahr and Byron Rakitzis.")
     (arguments
      `(#:phases
         (modify-phases %standard-phases
+          ,@(if (%current-target-system)
+                '((add-before 'configure 'set-cross-cc
+                     (lambda _
+                       (substitute* "configure"
+                         (("CC_FOR_GETHOST=\"cc\"")
+                          "CC_FOR_GETHOST=\"gcc\""))
+                       #t)))
+                '())
           (add-before 'check 'patch-test-scripts
             (lambda _
               ;; Take care of pwd
@@ -381,7 +427,7 @@ written by Paul Haahr and Byron Rakitzis.")
                 (with-directory-excursion bin
                   (symlink "tcsh" "csh"))
                 #t))))))
-    (home-page "http://www.tcsh.org/")
+    (home-page "https://www.tcsh.org/")
     (synopsis "Unix shell based on csh")
     (description
      "Tcsh is an enhanced, but completely compatible version of the Berkeley
@@ -394,7 +440,7 @@ history mechanism, job control and a C-like syntax.")
 (define-public zsh
   (package
     (name "zsh")
-    (version "5.6.2")
+    (version "5.8")
     (source (origin
               (method url-fetch)
               (uri (list (string-append
@@ -405,9 +451,18 @@ history mechanism, job control and a C-like syntax.")
                            ".tar.xz")))
               (sha256
                (base32
-                "17iffliqcj4hv91g0bd2sxsyfcz51mfyh97sp2iyrs2p0mndc2x5"))))
+                "09yyaadq738zlrnlh1hd3ycj1mv3q5hh4xl1ank70mjnqm6bbi6w"))))
     (build-system gnu-build-system)
-    (arguments `(#:configure-flags '("--with-tcsetpgrp" "--enable-pcre")
+    (arguments `(#:configure-flags
+                 `("--with-tcsetpgrp"
+                  "--enable-pcre"
+                  "--enable-maildir-support"
+                  ;; share/zsh/site-functions isn't populated
+                  "--disable-site-fndir"
+                  ,(string-append
+                    "--enable-additional-fpath="
+                    "/usr/local/share/zsh/site-functions," ; for foreign OS
+                    "/run/current-system/profile/share/zsh/site-functions"))
                  #:phases
                  (modify-phases %standard-phases
                    (add-before 'configure 'fix-sh
@@ -458,21 +513,30 @@ ksh, and tcsh.")
 (define-public xonsh
   (package
     (name "xonsh")
-    (version "0.6.2")
+    (version "0.9.21")
     (source
       (origin
         (method url-fetch)
         (uri (pypi-uri "xonsh" version))
         (sha256
-          (base32
-            "0c2bbmdg0n10q54vq9k1z5n53l0mh1hb1q5xprfhilvrbr6hlcwr"))
+          (base32 "1mih5w73wp57fnf1vcxnfmm5d31vm7pz8fq5a9vw1ch3dv0yczl5"))
         (modules '((guix build utils)))
         (snippet
          `(begin
-            ;; Delete bundled ply.
+            ;; Delete bundled PLY.
             (delete-file-recursively "xonsh/ply")
-            (substitute* '("setup.py")
-              (("'xonsh\\.ply\\.ply',") ""))
+            (substitute* "setup.py"
+              (("\"xonsh\\.ply\\.ply\",") ""))
+            ;; Use our properly packaged PLY instead.
+            (substitute* (list "setup.py"
+                               "tests/test_lexer.py"
+                               "xonsh/__amalgam__.py"
+                               "xonsh/lexer.py"
+                               "xonsh/parsers/base.py"
+                               "xonsh/xonfig.py")
+              (("from xonsh\\.ply\\.(.*) import" _ module)
+               (format #f "from ~a import" module))
+              (("from xonsh\\.ply import") "import"))
             #t))))
     (build-system python-build-system)
     (arguments
@@ -482,7 +546,7 @@ ksh, and tcsh.")
        #:tests? #f))
     (inputs
      `(("python-ply" ,python-ply)))
-    (home-page "http://xon.sh/")
+    (home-page "https://xon.sh/")
     (synopsis "Python-ish shell")
     (description
      "Xonsh is a Python-ish, BASHwards-looking shell language and command
@@ -555,8 +619,9 @@ operating system.")
            "1z16qwix8z6a40fskdgxsibkqgdrp4q6ncp4n6hnv4r9iihy2d8r"))))
       (build-system gnu-build-system)
       (arguments
-       `(#:tests? #f ;No tests are included
-         #:make-flags (list "CC=gcc")
+       `(#:tests? #f                    ; no tests are included
+         #:make-flags
+         (list ,(string-append "CC=" (cc-for-target)))
          #:phases
          (modify-phases %standard-phases
            (delete 'configure)
@@ -673,16 +738,16 @@ The OpenBSD Korn Shell is a cleaned up and enhanced ksh.")
 (define-public loksh
   (package
     (name "loksh")
-    (version "6.5")
+    (version "6.6")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/dimkr/loksh.git")
+             (url "https://github.com/dimkr/loksh")
              (commit version)))
        (file-name (git-file-name name version))
        (sha256
-        (base32 "01ra64zm1ryb4jsbmh8c3fjaymyy1992hzpm6iydbfxn1sjdihha"))))
+        (base32 "1a8s64n97ikvvi7ckirxnnjvcmhr3dd4rnqm2ivapyzb0wp42jk7"))))
     (build-system gnu-build-system)
     (inputs
      `(("libbsd" ,libbsd)
@@ -709,18 +774,17 @@ interactive POSIX shell targeted at resource-constrained systems.")
 (define-public mksh
   (package
     (name "mksh")
-    (version "56")
+    (version "58")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R"
                            version ".tgz"))
        (sha256
-        (base32
-         "1x4zjj9259ijpf8jw0nyh1fnr1pbm5fwvylclpvcrlb45xrglf5d"))))
+        (base32 "1337zjvzh14yncg9igdry904a3ns52l8rnm1kcq262w7f5xyp2v0"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:tests? #f ; tests require access to /dev/tty
+     `(#:tests? #f                      ; tests require access to /dev/tty
        #:phases
        (modify-phases %standard-phases
          (delete 'configure)
@@ -744,81 +808,80 @@ interactive POSIX shell targeted at resource-constrained systems.")
 Korn Shell programming language and a successor to the Public Domain Korn
 Shell (pdksh).")
     (license (list miros
-                   isc)))) ; strlcpy.c
+                   isc))))              ; strlcpy.c
 
-(define-public oil-shell
+(define-public oil
   (package
-    (name "oil-shell")
-    (version "0.6.0")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://www.oilshell.org/download/oil-"
-                                  version ".tar.xz"))
-              (sha256
-               (base32
-                "1dw4mgnlmaxlfygasfihgvbj32d3m9w6k5j7azb9d9lp35f3l7hl"))))
+    (name "oil")
+    ;; https://www.oilshell.org/blog/2020/04/release-0.8.pre4.html#comment-on-version-numbering
+    (version "0.8.pre6")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://www.oilshell.org/download/oil-"
+                           version ".tar.gz"))
+       (sha256
+        (base32 "11nfwn5b1w74hv78065jg2zm45mqzi59381b0f649j7n3g7yp3iq"))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f ; the tests are not distributed in the tarballs
-       #:strip-binaries? #f ; the binaries cannot be stripped
+     `(#:strip-binaries? #f             ; strip breaks the binary
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'patch-compiler-invocation
-           (lambda _
-             (substitute* "configure"
-               ((" cc ") " gcc "))
-             #t))
          (replace 'configure
            (lambda* (#:key outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out")))
                (setenv "CC" "gcc")
-               ;; The configure script doesn't recognize CONFIG_SHELL.
-               (setenv "CONFIG_SHELL" (which "sh"))
+               (substitute* "configure"
+                 ((" cc ") " $CC "))
                (invoke "./configure" (string-append "--prefix=" out)
                        "--with-readline"))))
-         (add-before 'install 'make-destination
+         (replace 'check
+           ;; The tests are not distributed in the tarballs but upstream
+           ;; recommends running this smoke test.
+           ;; https://github.com/oilshell/oil/blob/release/0.8.pre6/INSTALL.txt#L38-L48
            (lambda _
-             ;; The build scripts don't create the destination directory.
-             (mkdir-p (string-append (assoc-ref %outputs "out") "/bin")))))))
+             (let* ((oil "_bin/oil.ovm"))
+               (invoke/quiet oil "osh" "-c" "echo hi")
+               (invoke/quiet oil "osh" "-n" "configure")))))))
     (inputs
      `(("readline" ,readline)))
-    (synopsis "Bash-compatible Unix shell")
-    (description "Oil is a Unix / POSIX shell, compatible with Bash.  It
-implements the Oil language, which is a new shell language to which Bash can be
-automatically translated.  The Oil language is a superset of Bash.  It also
-implements the OSH language, a statically-parseable language based on Bash as it
-is commonly written.")
-    (home-page "https://www.oilshell.org/")
-    (license (list psfl ; The Oil sources include a patched Python 2 source tree
+    (home-page "https://www.oilshell.org")
+    (synopsis "Programming language and Bash-compatible Unix shell")
+    (description "Oil is a programming language with automatic translation for
+Bash.  It includes osh, a Unix/POSIX shell that runs unmodified Bash
+scripts.")
+    (license (list psfl                 ; tarball includes python2.7
                    asl2.0))))
 
+(define-public oil-shell
+  (deprecated-package "oil-shell" oil))
+
 (define-public gash
   (package
     (name "gash")
-    (version "0.1")
+    (version "0.2.0")
     (source
      (origin (method url-fetch)
              (uri (string-append "mirror://savannah/gash/gash-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "00m3lif64zyxd41cnk208kc81nl6qz659676qgiaqgwrw0brzrid"))
+               "13m0yz5h9nj3x40mr6wr5xcpq1lscndfwcicw3skrz801025hhgf"))
              (modules '((guix build utils)))
              (snippet
               '(begin
-                 (substitute* "Makefile.in"
-                   (("^moddir = (.*)/guile/(.*)" _ before after)
-                    (string-append "moddir = " before "/guile/site/"
-                                   after))
-                   (("^ccachedir = (.*)/ccache/(.*)" _ before after)
-                    (string-append "ccachedir = " before
-                                   "/site-ccache/" after)))
+                 ;; Allow builds with Guile 3.0.
+                 (substitute* "configure"
+                   (("search=\"2\\.2 2\\.0\"")
+                    "search=\"3.0 2.2 2.0\""))
                  #t))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
     (inputs
-     `(("guile" ,guile-2.2)))
+     `(("guile" ,guile-3.0)))
+    (arguments
+     '(#:make-flags '("XFAIL_TESTS=tests/redirects.org")))
     (home-page "https://savannah.nongnu.org/projects/gash/")
     (synopsis "POSIX-compatible shell written in Guile Scheme")
     (description "Gash is a POSIX-compatible shell written in Guile
@@ -826,3 +889,40 @@ Scheme.  It provides both the shell interface, as well as a Guile
 library for parsing shell scripts.  Gash is designed to bootstrap Bash
 as part of the Guix bootstrap process.")
     (license gpl3+)))
+
+(define-public gash-utils
+  (package
+    (name "gash-utils")
+    (version "0.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://savannah/gash/gash-utils-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0ib2p52qmbac5n0s5bys4fiwim461ps546976l1n7pwbs0avh7fk"))
+              (patches (search-patches "gash-utils-ls-test.patch"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; Allow builds with Guile 3.0.
+                  (substitute* "configure"
+                    (("search=\"2\\.2 2\\.0\"")
+                     "search=\"3.0 2.2 2.0\""))
+                  #t))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("guile" ,guile-3.0)
+       ("gash" ,gash)))
+    (home-page "https://savannah.nongnu.org/projects/gash/")
+    (synopsis "Core POSIX utilities written in Guile Scheme")
+    (description "Gash-Utils provides Scheme implementations of many
+common POSIX utilities (there are about 40 of them, ranging in
+complexity from @command{false} to @command{awk}).  The utilities are
+designed to be capable of bootstrapping their standard GNU counterparts.
+Underpinning these utilities are many Scheme interfaces for manipulating
+files and text.")
+    (license gpl3+)))
+