@@ -22,6 +22,7 @@
;;; Copyright © 2022 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 David Pflug <david@pflug.io>
+;;; Copyright © 2024 Paul A. Patience <paul@apatience.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -130,133 +131,129 @@ (define-public fish
(sha256
(base32 "1c9slg6azhc9jn1sb75wip4hl9zyibjy9nay505nkw0lnxw766yz"))))
(build-system cmake-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-after 'unpack 'set-env
+ (lambda _
+ ;; some tests write to $HOME
+ (setenv "HOME" (getcwd))))
+ (add-after 'unpack 'patch-tests
+ (lambda _
+ (let ((coreutils #$(this-package-native-input "coreutils"))
+ (bash #$(this-package-native-input "bash")))
+ ;; This test sporadically fails in the build container
+ ;; because of leftover zombie processes, which are not
+ ;; reaped automatically:
+ ;; "Found existing zombie processes. Clean up zombies before running this test."
+ ;; Disabling parallel tests does not reliably prevent it.
+ (delete-file "tests/checks/jobs.fish")
+ ;; This test fails.
+ (delete-file "tests/checks/pipeline-pgroup.fish")
+ ;; This one tries to open a terminal & can't simply be deleted.
+ (substitute* "cmake/Tests.cmake"
+ ((".* interactive\\.fish.*") ""))
+ ;; This one needs to chdir successfully.
+ (substitute* "tests/checks/vars_as_commands.fish"
+ (("/usr/bin") "/tmp"))
+ ;; 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\\)\\);"))
+ "")
+ ;; Not all mentions of /usr... need to exist, but these do.
+ (("\"/usr(|/lib)\"" _ subdirectory)
+ (string-append "\"/tmp" subdirectory "\"")))
+ (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"))))))
+ ;; Source /etc/fish/config.fish from $__fish_sysconf_dir/config.fish.
+ (add-after 'patch-tests 'patch-fish-config
+ (lambda _
+ (let ((port (open-file "etc/config.fish" "a")))
+ (display (string-append
+ "\n\n"
+ "# Patched by Guix.\n"
+ "# Source /etc/fish/config.fish.\n"
+ "if test -f /etc/fish/config.fish\n"
+ " source /etc/fish/config.fish\n"
+ "end\n")
+ port)
+ (close-port port))))
+ ;; Embed absolute paths.
+ (add-before 'install 'embed-absolute-paths
+ (lambda _
+ (substitute* "share/functions/__fish_print_help.fish"
+ (("nroff") (which "nroff")))))
+ ;; 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
+ (lambda _
+ (let ((port (open-file "share/__fish_build_paths.fish" "a")))
+ (display
+ (string-append
+ "\n\n"
+ "# Patched by Guix.\n"
+ "# Enable completions, functions and configurations in user's"
+ " and system's guix profiles by adding them to __extra_*"
+ " variables.\n"
+ "set -l __guix_profile_paths ~/.guix-profile"
+ " /run/current-system/profile\n"
+ "set __extra_completionsdir"
+ " $__guix_profile_paths\"/etc/fish/completions\""
+ " $__guix_profile_paths\"/share/fish/vendor_completions.d\""
+ " $__extra_completionsdir\n"
+ "set __extra_functionsdir"
+ " $__guix_profile_paths\"/etc/fish/functions\""
+ " $__guix_profile_paths\"/share/fish/vendor_functions.d\""
+ " $__extra_functionsdir\n"
+ "set __extra_confdir"
+ " $__guix_profile_paths\"/etc/fish/conf.d\""
+ " $__guix_profile_paths\"/share/fish/vendor_conf.d\""
+ " $__extra_confdir\n")
+ port)
+ (close-port port))))
+ ;; Use fish-foreign-env to source /etc/profile.
+ (add-before 'install 'source-etc-profile
+ (lambda _
+ (let ((port (open-file "share/__fish_build_paths.fish" "a")))
+ (display
+ (string-append
+ "\n\n"
+ "# Patched by Guix.\n"
+ "# Use fish-foreign-env to source /etc/profile.\n"
+ "if status is-login\n"
+ " set fish_function_path "
+ #$(this-package-input "fish-foreign-env") "/share/fish/functions"
+ " $__fish_datadir/functions\n"
+ " fenv source /etc/profile\n"
+ " set -e fish_function_path\n"
+ "end\n")
+ port)
+ (close-port port)))))))
+ (native-inputs
+ (list doxygen groff ; for 'fish --help'
+ bash coreutils procps)) ; for the test suite
(inputs
(list fish-foreign-env ncurses pcre2
- python)) ; for fish_config and manpage completions
- (native-inputs
- (list doxygen groff ; for 'fish --help'
- procps)) ; for the test suite
- (arguments
- '(#:phases
- (modify-phases %standard-phases
- (add-after 'unpack 'set-env
- (lambda _
- ;; 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 sporadically fails in the build container
- ;; because of leftover zombie processes, which are not
- ;; reaped automatically:
-;; "Found existing zombie processes. Clean up zombies before running this test."
- ;; Disabling parallel tests does not reliably prevent it.
- (delete-file "tests/checks/jobs.fish")
- ;; This test fails.
- (delete-file "tests/checks/pipeline-pgroup.fish")
- ;; This one tries to open a terminal & can't simply be deleted.
- (substitute* "cmake/Tests.cmake"
- ((".* interactive\\.fish.*") ""))
- ;; This one needs to chdir successfully.
- (substitute* "tests/checks/vars_as_commands.fish"
- (("/usr/bin") "/tmp"))
- ;; 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\\)\\);"))
- "")
- ;; Not all mentions of /usr... need to exist, but these do.
- (("\"/usr(|/lib)\"" _ subdirectory)
- (string-append "\"/tmp" subdirectory "\"")))
- (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-after 'patch-tests 'patch-fish-config
- (lambda _
- (let ((port (open-file "etc/config.fish" "a")))
- (display (string-append
- "\n\n"
- "# Patched by Guix.\n"
- "# Source /etc/fish/config.fish.\n"
- "if test -f /etc/fish/config.fish\n"
- " source /etc/fish/config.fish\n"
- "end\n")
- 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
- (lambda _
- (let ((port (open-file "share/__fish_build_paths.fish" "a")))
- (display
- (string-append
- "\n\n"
- "# Patched by Guix.\n"
- "# Enable completions, functions and configurations in user's"
- " and system's guix profiles by adding them to __extra_*"
- " variables.\n"
- "set -l __guix_profile_paths ~/.guix-profile"
- " /run/current-system/profile\n"
- "set __extra_completionsdir"
- " $__guix_profile_paths\"/etc/fish/completions\""
- " $__guix_profile_paths\"/share/fish/vendor_completions.d\""
- " $__extra_completionsdir\n"
- "set __extra_functionsdir"
- " $__guix_profile_paths\"/etc/fish/functions\""
- " $__guix_profile_paths\"/share/fish/vendor_functions.d\""
- " $__extra_functionsdir\n"
- "set __extra_confdir"
- " $__guix_profile_paths\"/etc/fish/conf.d\""
- " $__guix_profile_paths\"/share/fish/vendor_conf.d\""
- " $__extra_confdir\n")
- port)
- (close-port port))
- #t))
- ;; Use fish-foreign-env to source /etc/profile.
- (add-before 'install 'source-etc-profile
- (lambda* (#:key inputs #:allow-other-keys)
- (let ((port (open-file "share/__fish_build_paths.fish" "a")))
- (display
- (string-append
- "\n\n"
- "# Patched by Guix.\n"
- "# Use fish-foreign-env to source /etc/profile.\n"
- "if status is-login\n"
- " set fish_function_path "
- (assoc-ref inputs "fish-foreign-env") "/share/fish/functions"
- " $__fish_datadir/functions\n"
- " fenv source /etc/profile\n"
- " set -e fish_function_path\n"
- "end\n")
- port)
- (close-port port))
- #t)))))
+ python)) ; for fish_config and manpage completions
+ (home-page "https://fishshell.com/")
(synopsis "The friendly interactive shell")
(description
"Fish (friendly interactive shell) is a shell focused on interactive use,
@@ -267,7 +264,6 @@ (define-public fish
access to all the fish documentation in your web browser. Other features
include smart terminal handling based on terminfo, an easy to search history,
and syntax highlighting.")
- (home-page "https://fishshell.com/")
(license license:gpl2)))
(define-public fish-foreign-env