From 98ca712b8aca3d7673bf18b0e5b643f8ae80a1ec Mon Sep 17 00:00:00 2001 From: r-vdp Date: Thu, 27 Feb 2025 16:18:28 +0100 Subject: [PATCH] fish: use finalAttrs.finalPackage --- pkgs/by-name/fi/fish/package.nix | 558 +++++++++++++++---------------- 1 file changed, 278 insertions(+), 280 deletions(-) diff --git a/pkgs/by-name/fi/fish/package.nix b/pkgs/by-name/fi/fish/package.nix index 894c1745046e..0ae9963d571a 100644 --- a/pkgs/by-name/fi/fish/package.nix +++ b/pkgs/by-name/fi/fish/package.nix @@ -148,284 +148,282 @@ let test $fenv_status -eq 0 end # fenv ''; - - fish = stdenv.mkDerivation (finalAttrs: { - pname = "fish"; - version = "4.0.0"; - - src = fetchFromGitHub { - owner = "fish-shell"; - repo = "fish-shell"; - tag = finalAttrs.version; - hash = "sha256-BLbL5Tj3FQQCOeX5TWXMaxCpvdzZtKe5dDQi66uU/BM="; - }; - - env = { - FISH_BUILD_VERSION = finalAttrs.version; - # Skip tests that are known to be flaky in CI - CI = 1; - }; - - cargoDeps = rustPlatform.fetchCargoVendor { - inherit (finalAttrs) src; - hash = "sha256-j1HCj1iZ5ZV8nfMmJq5ggPD4s+5V8IretDdoz+G3wWU="; - }; - - patches = [ - # This test fails if the nix sandbox gets created on a filesystem that's - # mounted with the nosuid option. - ./disable_suid_test.patch - - # We don’t want to run `/usr/libexec/path_helper` on nix-darwin, - # as it pulls in paths not tracked in the system configuration - # and messes up the order of `$PATH`. Upstream are unfortunately - # unwilling to accept a change for this and have recommended that - # it should be a distro‐specific patch instead. - # - # See: - # - # * - # * - ./nix-darwin-path.patch - ]; - - # Fix FHS paths in tests - postPatch = - '' - substituteInPlace src/builtins/tests/test_tests.rs \ - --replace-fail '"/bin/ls"' '"${lib.getExe' coreutils "ls"}"' - - substituteInPlace src/tests/highlight.rs \ - --replace-fail '"/bin/echo"' '"${lib.getExe' coreutils "echo"}"' \ - --replace-fail '"/bin/c"' '"${lib.getExe' coreutils "c"}"' \ - --replace-fail '"/bin/ca"' '"${lib.getExe' coreutils "ca"}"' \ - --replace-fail '/usr' '/' - - substituteInPlace tests/checks/cd.fish \ - --replace-fail '/bin/pwd' '${lib.getExe' coreutils "pwd"}' - - substituteInPlace tests/checks/redirect.fish \ - --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' - - substituteInPlace tests/checks/vars_as_commands.fish \ - --replace-fail '/usr/bin' '${coreutils}/bin' - - substituteInPlace tests/checks/jobs.fish \ - --replace-fail 'ps -o' '${lib.getExe' procps "ps"} -o' \ - --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' - - substituteInPlace tests/checks/job-control-noninteractive.fish \ - --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' - - substituteInPlace tests/checks/complete.fish \ - --replace-fail '/bin/ls' '${lib.getExe' coreutils "ls"}' - - # Several pexpect tests are flaky - # See https://github.com/fish-shell/fish-shell/issues/8789 - rm tests/pexpects/exit_handlers.py - rm tests/pexpects/private_mode.py - rm tests/pexpects/history.py - '' - + lib.optionalString stdenv.hostPlatform.isDarwin '' - # Tests use pkill/pgrep which are currently not built on Darwin - # See https://github.com/NixOS/nixpkgs/pull/103180 - # and https://github.com/NixOS/nixpkgs/issues/141157 - rm tests/pexpects/exit.py - rm tests/pexpects/job_summary.py - rm tests/pexpects/signals.py - rm tests/pexpects/fg.py - '' - + lib.optionalString stdenv.hostPlatform.isAarch64 '' - # This test seems to consistently fail on aarch64 - rm tests/checks/cd.fish - ''; - - outputs = [ - "out" - "doc" - ]; - - strictDeps = true; - - nativeBuildInputs = [ - cargo - cmake - gettext - ninja - pkg-config - rustc - rustPlatform.cargoSetupHook - # Avoid warnings when building the manpages about HOME not being writable - writableTmpDirAsHomeHook - ]; - - buildInputs = [ - libiconv - pcre2 - ]; - - cmakeFlags = - [ - "-DCMAKE_INSTALL_DOCDIR=${placeholder "doc"}/share/doc/fish" - ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ - "-DMAC_CODESIGN_ID=OFF" - ]; - - # Fish’s test suite needs to be able to look up process information and send signals. - sandboxProfile = lib.optionalString stdenv.hostPlatform.isDarwin '' - (allow mach-lookup mach-task-name) - (allow signal (target children)) - ''; - - # The optional string is kind of an inelegant way to get fish to cross compile. - # Fish needs coreutils as a runtime dependency, and it gets put into - # CMAKE_PREFIX_PATH, which cmake uses to look up build time programs, so it - # was clobbering the PATH. It probably needs to be fixed at a lower level. - preConfigure = - '' - patchShebangs ./build_tools/git_version_gen.sh - patchShebangs ./tests/test_driver.py - '' - + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' - export CMAKE_PREFIX_PATH= - ''; - - # Required binaries during execution - propagatedBuildInputs = [ - coreutils - gnugrep - gnused - groff - gettext - ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) man-db; - - doCheck = true; - - nativeCheckInputs = - [ - coreutils - glibcLocales - (python3.withPackages (ps: [ ps.pexpect ])) - procps - sphinx - ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ - # For the getconf command, used in default-setup-path.fish - darwin.system_cmds - ]; - - checkTarget = "fish_run_tests"; - preCheck = '' - export TERMINFO="${ncurses}/share/terminfo" - ''; - - nativeInstallCheckInputs = [ - versionCheckHook - ]; - versionCheckProgramArg = [ "--version" ]; - doInstallCheck = true; - - # Ensure that we don't vendor libpcre2, but instead link against the one from nixpkgs - installCheckPhase = lib.optionalString (stdenv.hostPlatform.libc == "glibc") '' - runHook preInstallCheck - - echo "Checking that we don't vendor pcre2" - ldd "$out/bin/fish" | grep ${lib.getLib pcre2} - - runHook postInstallCheck - ''; - - postInstall = - '' - substituteInPlace "$out/share/fish/functions/grep.fish" \ - --replace-fail "command grep" "command ${lib.getExe gnugrep}" - - substituteInPlace "$out/share/fish/functions/__fish_print_help.fish" \ - --replace-fail "nroff" "${lib.getExe' groff "nroff"}" - - substituteInPlace $out/share/fish/completions/{sudo.fish,doas.fish} \ - --replace-fail "/usr/local/sbin /sbin /usr/sbin" "" - '' - + lib.optionalString usePython '' - cat > $out/share/fish/functions/__fish_anypython.fish <> webconfig.py - - # and check whether the message appears on the page - # cannot test the http server because it needs a localhost port - cat (${python3}/bin/python ./webconfig.py \ - | tail -n1 | ${lib.getExe gnused} -e 's|file://||' \ - ) | ${lib.getExe gnugrep} -q 'a href="http://localhost.*Start the Fish Web config' - ''; - in - runCommand "test-web-config" { } '' - HOME=$(mktemp -d) - ${fish}/bin/fish ${fishScript} && touch $out - ''; - }; - updateScript = nix-update-script { }; - }; - }); in -fish +stdenv.mkDerivation (finalAttrs: { + pname = "fish"; + version = "4.0.0"; + + src = fetchFromGitHub { + owner = "fish-shell"; + repo = "fish-shell"; + tag = finalAttrs.version; + hash = "sha256-BLbL5Tj3FQQCOeX5TWXMaxCpvdzZtKe5dDQi66uU/BM="; + }; + + env = { + FISH_BUILD_VERSION = finalAttrs.version; + # Skip tests that are known to be flaky in CI + CI = 1; + }; + + cargoDeps = rustPlatform.fetchCargoVendor { + inherit (finalAttrs) src; + hash = "sha256-j1HCj1iZ5ZV8nfMmJq5ggPD4s+5V8IretDdoz+G3wWU="; + }; + + patches = [ + # This test fails if the nix sandbox gets created on a filesystem that's + # mounted with the nosuid option. + ./disable_suid_test.patch + + # We don’t want to run `/usr/libexec/path_helper` on nix-darwin, + # as it pulls in paths not tracked in the system configuration + # and messes up the order of `$PATH`. Upstream are unfortunately + # unwilling to accept a change for this and have recommended that + # it should be a distro‐specific patch instead. + # + # See: + # + # * + # * + ./nix-darwin-path.patch + ]; + + # Fix FHS paths in tests + postPatch = + '' + substituteInPlace src/builtins/tests/test_tests.rs \ + --replace-fail '"/bin/ls"' '"${lib.getExe' coreutils "ls"}"' + + substituteInPlace src/tests/highlight.rs \ + --replace-fail '"/bin/echo"' '"${lib.getExe' coreutils "echo"}"' \ + --replace-fail '"/bin/c"' '"${lib.getExe' coreutils "c"}"' \ + --replace-fail '"/bin/ca"' '"${lib.getExe' coreutils "ca"}"' \ + --replace-fail '/usr' '/' + + substituteInPlace tests/checks/cd.fish \ + --replace-fail '/bin/pwd' '${lib.getExe' coreutils "pwd"}' + + substituteInPlace tests/checks/redirect.fish \ + --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' + + substituteInPlace tests/checks/vars_as_commands.fish \ + --replace-fail '/usr/bin' '${coreutils}/bin' + + substituteInPlace tests/checks/jobs.fish \ + --replace-fail 'ps -o' '${lib.getExe' procps "ps"} -o' \ + --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' + + substituteInPlace tests/checks/job-control-noninteractive.fish \ + --replace-fail '/bin/echo' '${lib.getExe' coreutils "echo"}' + + substituteInPlace tests/checks/complete.fish \ + --replace-fail '/bin/ls' '${lib.getExe' coreutils "ls"}' + + # Several pexpect tests are flaky + # See https://github.com/fish-shell/fish-shell/issues/8789 + rm tests/pexpects/exit_handlers.py + rm tests/pexpects/private_mode.py + rm tests/pexpects/history.py + '' + + lib.optionalString stdenv.hostPlatform.isDarwin '' + # Tests use pkill/pgrep which are currently not built on Darwin + # See https://github.com/NixOS/nixpkgs/pull/103180 + # and https://github.com/NixOS/nixpkgs/issues/141157 + rm tests/pexpects/exit.py + rm tests/pexpects/job_summary.py + rm tests/pexpects/signals.py + rm tests/pexpects/fg.py + '' + + lib.optionalString stdenv.hostPlatform.isAarch64 '' + # This test seems to consistently fail on aarch64 + rm tests/checks/cd.fish + ''; + + outputs = [ + "out" + "doc" + ]; + + strictDeps = true; + + nativeBuildInputs = [ + cargo + cmake + gettext + ninja + pkg-config + rustc + rustPlatform.cargoSetupHook + # Avoid warnings when building the manpages about HOME not being writable + writableTmpDirAsHomeHook + ]; + + buildInputs = [ + libiconv + pcre2 + ]; + + cmakeFlags = + [ + "-DCMAKE_INSTALL_DOCDIR=${placeholder "doc"}/share/doc/fish" + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + "-DMAC_CODESIGN_ID=OFF" + ]; + + # Fish’s test suite needs to be able to look up process information and send signals. + sandboxProfile = lib.optionalString stdenv.hostPlatform.isDarwin '' + (allow mach-lookup mach-task-name) + (allow signal (target children)) + ''; + + # The optional string is kind of an inelegant way to get fish to cross compile. + # Fish needs coreutils as a runtime dependency, and it gets put into + # CMAKE_PREFIX_PATH, which cmake uses to look up build time programs, so it + # was clobbering the PATH. It probably needs to be fixed at a lower level. + preConfigure = + '' + patchShebangs ./build_tools/git_version_gen.sh + patchShebangs ./tests/test_driver.py + '' + + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' + export CMAKE_PREFIX_PATH= + ''; + + # Required binaries during execution + propagatedBuildInputs = [ + coreutils + gnugrep + gnused + groff + gettext + ] ++ lib.optional (!stdenv.hostPlatform.isDarwin) man-db; + + doCheck = true; + + nativeCheckInputs = + [ + coreutils + glibcLocales + (python3.withPackages (ps: [ ps.pexpect ])) + procps + sphinx + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # For the getconf command, used in default-setup-path.fish + darwin.system_cmds + ]; + + checkTarget = "fish_run_tests"; + preCheck = '' + export TERMINFO="${ncurses}/share/terminfo" + ''; + + nativeInstallCheckInputs = [ + versionCheckHook + ]; + versionCheckProgramArg = [ "--version" ]; + doInstallCheck = true; + + # Ensure that we don't vendor libpcre2, but instead link against the one from nixpkgs + installCheckPhase = lib.optionalString (stdenv.hostPlatform.libc == "glibc") '' + runHook preInstallCheck + + echo "Checking that we don't vendor pcre2" + ldd "$out/bin/fish" | grep ${lib.getLib pcre2} + + runHook postInstallCheck + ''; + + postInstall = + '' + substituteInPlace "$out/share/fish/functions/grep.fish" \ + --replace-fail "command grep" "command ${lib.getExe gnugrep}" + + substituteInPlace "$out/share/fish/functions/__fish_print_help.fish" \ + --replace-fail "nroff" "${lib.getExe' groff "nroff"}" + + substituteInPlace $out/share/fish/completions/{sudo.fish,doas.fish} \ + --replace-fail "/usr/local/sbin /sbin /usr/sbin" "" + '' + + lib.optionalString usePython '' + cat > $out/share/fish/functions/__fish_anypython.fish <> webconfig.py + + # and check whether the message appears on the page + # cannot test the http server because it needs a localhost port + cat (${python3}/bin/python ./webconfig.py \ + | tail -n1 | ${lib.getExe gnused} -e 's|file://||' \ + ) | ${lib.getExe gnugrep} -q 'a href="http://localhost.*Start the Fish Web config' + ''; + in + runCommand "test-web-config" { } '' + HOME=$(mktemp -d) + ${finalAttrs.finalPackage}/bin/fish ${fishScript} && touch $out + ''; + }; + updateScript = nix-update-script { }; + }; +})