X-Git-Url: https://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/462ad9f56b9665b8d22960acee73ad91f1052c9c..90ff99d9c5bb24d7d77bb7795860745f520e3239:/gnu/packages/shells.scm diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index 0579c167fc..7868dc40f0 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -3,14 +3,19 @@ ;;; Copyright © 2014, 2015 David Thompson ;;; Copyright © 2014 Kevin Lemonnier ;;; Copyright © 2015 Jeff Mickey -;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice ;;; Copyright © 2016 Stefan Reichör ;;; Copyright © 2017, 2018 Ricardo Wurmus -;;; Copyright © 2017, 2018 ng0 +;;; Copyright © 2017, 2018 Nikita ;;; Copyright © 2017, 2018 Leo Famulari ;;; Copyright © 2017 Arun Isaac ;;; Copyright © 2019 Meiyo Peng ;;; Copyright © 2019 Timothy Sample +;;; Copyright © 2019 Mathieu Othacehe +;;; Copyright © 2019, 2020 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2020 Brice Waegeneire +;;; Copyright © 2020 Ryan Prior +;;; Copyright © 2020 Efraim Flashner ;;; ;;; 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) @@ -46,26 +52,27 @@ #: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,14 +774,14 @@ interactive POSIX shell targeted at resource-constrained systems.") (define-public mksh (package (name "mksh") - (version "57") + (version "58") (source (origin (method url-fetch) (uri (string-append "https://www.mirbsd.org/MirOS/dist/mir/mksh/mksh-R" version ".tgz")) (sha256 - (base32 "0xdykm1z710wriwd6nc8s8lwk2dwjl63dq96xxaawlid31a1241x")))) + (base32 "1337zjvzh14yncg9igdry904a3ns52l8rnm1kcq262w7f5xyp2v0")))) (build-system gnu-build-system) (arguments `(#:tests? #f ; tests require access to /dev/tty @@ -745,79 +810,78 @@ Shell (pdksh).") (license (list miros 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 @@ -825,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+))) +