about summary refs log tree commit diff
path: root/nixpkgs/pkgs/shells/powershell/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/shells/powershell/default.nix')
-rw-r--r--nixpkgs/pkgs/shells/powershell/default.nix172
1 files changed, 111 insertions, 61 deletions
diff --git a/nixpkgs/pkgs/shells/powershell/default.nix b/nixpkgs/pkgs/shells/powershell/default.nix
index 2f7bc15c1b3c..b84cfb5be7a6 100644
--- a/nixpkgs/pkgs/shells/powershell/default.nix
+++ b/nixpkgs/pkgs/shells/powershell/default.nix
@@ -1,89 +1,139 @@
-{ stdenv, lib, autoPatchelfHook, fetchurl, libunwind, libuuid, icu, curl
-, darwin, makeWrapper, less, openssl, pam, lttng-ust }:
-
-let archString = if stdenv.isAarch64 then "arm64"
-                 else if stdenv.isx86_64 then "x64"
-                 else throw "unsupported platform";
-    platformString = if stdenv.isDarwin then "osx"
-                     else if stdenv.isLinux then "linux"
-                     else throw "unsupported platform";
-    platformHash = {
-      x86_64-darwin = "sha256-FX3OyVzwU+Ms2tgjpZ4dPdjeJx2H5541dQZAjhI3n1U=";
-      aarch64-darwin = "sha256-Dg7FRF5inRnzP6tjDhIgHTJ1J2EQXnegqimZPK574WQ=";
-      x86_64-linux = "sha256-6F1VROE6kk+LLEpdwtQ6vkbkZjP4no0TjTnAqurLmXY=";
-      aarch64-linux = "sha256-NO4E2TOUIYyUFJmi3zKJzOyP0/rTPTZgJZcebVNkSfk=";
-    }.${stdenv.hostPlatform.system} or (throw "unsupported platform");
-    platformLdLibraryPath = if stdenv.isDarwin then "DYLD_FALLBACK_LIBRARY_PATH"
-                     else if stdenv.isLinux then "LD_LIBRARY_PATH"
-                     else throw "unsupported platform";
-                     libraries = [ libunwind libuuid icu curl openssl ] ++
-                       (if stdenv.isLinux then [ pam lttng-ust ] else [ darwin.Libsystem ]);
+{ lib
+, stdenv
+, fetchurl
+, less
+, makeWrapper
+, autoPatchelfHook
+, curl
+, icu
+, libuuid
+, libunwind
+, openssl
+, darwin
+, lttng-ust
+, pam
+, testers
+, powershell
+, writeShellScript
+, common-updater-scripts
+, gnused
+, jq
+}:
+
+let
+  ext = stdenv.hostPlatform.extensions.sharedLibrary;
+  platformLdLibraryPath = {
+    darwin = "DYLD_FALLBACK_LIBRARY_PATH";
+    linux = "LD_LIBRARY_PATH";
+  }.${stdenv.hostPlatform.parsed.kernel.name} or (throw "unsupported platform");
 in
 stdenv.mkDerivation rec {
   pname = "powershell";
-  version = "7.3.4";
+  version = "7.3.8";
 
-  src = fetchurl {
-    url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-${platformString}-${archString}.tar.gz";
-    hash = platformHash;
-  };
+  src = passthru.sources.${stdenv.hostPlatform.system}
+    or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
 
   sourceRoot = ".";
 
   strictDeps = true;
-  buildInputs = [ less ] ++ libraries;
-  nativeBuildInputs = [ makeWrapper ]
-    ++ lib.optional stdenv.isLinux autoPatchelfHook;
 
-  installPhase =
-  let
-    ext = stdenv.hostPlatform.extensions.sharedLibrary;
-  in ''
-    pslibs=$out/share/powershell
-    mkdir -p $pslibs
+  nativeBuildInputs = [
+    less
+    makeWrapper
+  ] ++ lib.optionals stdenv.isLinux [
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    curl
+    icu
+    libuuid
+    libunwind
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.Libsystem
+  ] ++ lib.optionals stdenv.isLinux [
+    lttng-ust
+    pam
+  ];
 
-    cp -r * $pslibs
+  installPhase = ''
+    runHook preInstall
 
-    # At least the 7.1.4-osx package does not have the executable bit set.
-    chmod a+x $pslibs/pwsh
+    mkdir -p $out/{bin,share/powershell}
+    cp -R * $out/share/powershell
+    chmod +x $out/share/powershell/pwsh
+    makeWrapper $out/share/powershell/pwsh $out/bin/pwsh \
+      --prefix ${platformLdLibraryPath} : "${lib.makeLibraryPath buildInputs}" \
+      --set TERM xterm \
+      --set POWERSHELL_TELEMETRY_OPTOUT 1 \
+      --set DOTNET_CLI_TELEMETRY_OPTOUT 1
 
   '' + lib.optionalString (stdenv.isLinux && stdenv.isx86_64) ''
-    patchelf --replace-needed libcrypto${ext}.1.0.0 libcrypto${ext} $pslibs/libmi.so
-    patchelf --replace-needed libssl${ext}.1.0.0 libssl${ext} $pslibs/libmi.so
-  '' + lib.optionalString stdenv.isLinux ''
-    patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $pslibs/libcoreclrtraceptprovider.so
-  '' + ''
+    patchelf --replace-needed libcrypto${ext}.1.0.0 libcrypto${ext} $out/share/powershell/libmi.so
+    patchelf --replace-needed libssl${ext}.1.0.0 libssl${ext} $out/share/powershell/libmi.so
 
-    mkdir -p $out/bin
+  '' + lib.optionalString stdenv.isLinux ''
+    patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $out/share/powershell/libcoreclrtraceptprovider.so
 
-    makeWrapper $pslibs/pwsh $out/bin/pwsh \
-      --prefix ${platformLdLibraryPath} : "${lib.makeLibraryPath libraries}" \
-      --set TERM xterm --set POWERSHELL_TELEMETRY_OPTOUT 1 --set DOTNET_CLI_TELEMETRY_OPTOUT 1
+  '' + ''
+    runHook postInstall
   '';
 
   dontStrip = true;
 
-  doInstallCheck = true;
-  installCheckPhase = ''
-    # May need a writable home, seen on Darwin.
-    HOME=$TMP $out/bin/pwsh --help > /dev/null
-  '';
+  passthru = {
+    shellPath = "/bin/pwsh";
+    sources = {
+      aarch64-darwin = fetchurl {
+        url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-arm64.tar.gz";
+        hash = "sha256-0FyTt+tn3mpr6LxC3oQvmULNO8+Jp7qsjISRdTesCCI=";
+      };
+      aarch64-linux = fetchurl {
+        url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-arm64.tar.gz";
+        hash = "sha256-BNf157sdXg7pV6Hfg9luw3Xi03fTekesBQCwDFeO8ZI=";
+      };
+      x86_64-darwin = fetchurl {
+        url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-x64.tar.gz";
+        hash = "sha256-Ts+nF6tPQZfYgJAvPtijvYBGSrg5mxCeNEa0X74/g4M=";
+      };
+      x86_64-linux = fetchurl {
+        url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-x64.tar.gz";
+        hash = "sha256-iELDoFTy/W6Wm0gNJmywwvp811WycjffBTMDRtrWdVU=";
+      };
+    };
+    tests.version = testers.testVersion {
+      package = powershell;
+      command = "HOME=$(mktemp -d) pwsh --version";
+    };
+    updateScript = writeShellScript "update-powershell" ''
+      set -o errexit
+      export PATH="${lib.makeBinPath [ common-updater-scripts curl gnused jq ]}"
+      NEW_VERSION=$(curl -s https://api.github.com/repos/PowerShell/PowerShell/releases/latest | jq .tag_name --raw-output | sed -e 's/v//')
+
+      if [[ "${version}" = "$NEW_VERSION" ]]; then
+        echo "The new version same as the old version."
+        exit 0
+      fi
+
+      for platform in ${lib.escapeShellArgs meta.platforms}; do
+        update-source-version "powershell" "0" "${lib.fakeHash}" --source-key="sources.$platform"
+        update-source-version "powershell" "$NEW_VERSION" --source-key="sources.$platform"
+      done
+    '';
+  };
 
   meta = with lib; {
     description = "Powerful cross-platform (Windows, Linux, and macOS) shell and scripting language based on .NET";
-    homepage = "https://github.com/PowerShell/PowerShell";
+    homepage = "https://microsoft.com/PowerShell";
+    license = licenses.mit;
+    mainProgram = "pwsh";
+    maintainers = with maintainers; [ wegank ];
+    platforms = builtins.attrNames passthru.sources;
     sourceProvenance = with sourceTypes; [
       binaryBytecode
       binaryNativeCode
     ];
-    maintainers = with maintainers; [ yrashk srgom p3psi ];
-    mainProgram = "pwsh";
-    platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
-    license = with licenses; [ mit ];
   };
-
-  passthru = {
-    shellPath = "/bin/pwsh";
-  };
-
 }