Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / shells / powershell / default.nix
blob715f33bbbf8161af5ac20c1d3569602b0a358647
1 { lib
2 , stdenv
3 , fetchurl
4 , less
5 , makeWrapper
6 , autoPatchelfHook
7 , curl
8 , icu
9 , libuuid
10 , libunwind
11 , openssl
12 , darwin
13 , lttng-ust
14 , pam
15 , testers
16 , powershell
17 , writeShellScript
18 , common-updater-scripts
19 , gnused
20 , jq
23 let
24   ext = stdenv.hostPlatform.extensions.sharedLibrary;
25   platformLdLibraryPath = {
26     darwin = "DYLD_FALLBACK_LIBRARY_PATH";
27     linux = "LD_LIBRARY_PATH";
28   }.${stdenv.hostPlatform.parsed.kernel.name} or (throw "unsupported platform");
30 stdenv.mkDerivation rec {
31   pname = "powershell";
32   version = "7.4.3";
34   src = passthru.sources.${stdenv.hostPlatform.system}
35     or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
37   sourceRoot = ".";
39   strictDeps = true;
41   nativeBuildInputs = [
42     less
43     makeWrapper
44   ] ++ lib.optionals stdenv.isLinux [
45     autoPatchelfHook
46   ];
48   buildInputs = [
49     curl
50     icu
51     libuuid
52     libunwind
53     openssl
54   ] ++ lib.optionals stdenv.isDarwin [
55     darwin.Libsystem
56   ] ++ lib.optionals stdenv.isLinux [
57     lttng-ust
58     pam
59   ];
61   installPhase = ''
62     runHook preInstall
64     mkdir -p $out/{bin,share/powershell}
65     cp -R * $out/share/powershell
66     chmod +x $out/share/powershell/pwsh
67     makeWrapper $out/share/powershell/pwsh $out/bin/pwsh \
68       --prefix ${platformLdLibraryPath} : "${lib.makeLibraryPath buildInputs}" \
69       --set TERM xterm \
70       --set POWERSHELL_TELEMETRY_OPTOUT 1 \
71       --set DOTNET_CLI_TELEMETRY_OPTOUT 1
73   '' + lib.optionalString stdenv.isLinux ''
74     patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $out/share/powershell/libcoreclrtraceptprovider.so
76   '' + ''
77     runHook postInstall
78   '';
80   dontStrip = true;
82   passthru = {
83     shellPath = "/bin/pwsh";
84     sources = {
85       aarch64-darwin = fetchurl {
86         url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-arm64.tar.gz";
87         hash = "sha256-n1A17psyDWY/BtwvmQn3SjYqhX/C5xZJnq83aA3mUJk=";
88       };
89       aarch64-linux = fetchurl {
90         url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-arm64.tar.gz";
91         hash = "sha256-TuSjvi2aJz2jtwm4CRP99M4dhxzerTCdyOOI6FC8CN0=";
92       };
93       x86_64-darwin = fetchurl {
94         url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-x64.tar.gz";
95         hash = "sha256-bMOVJ8TT8Rh79rD+vSJP/gxjNHXQE39qASvLAc9P4D8=";
96       };
97       x86_64-linux = fetchurl {
98         url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-x64.tar.gz";
99         hash = "sha256-XPzCKK/T/85TbsRUGrr+l8Ypr81tyFyaIHEolLv2Wts=";
100       };
101     };
102     tests.version = testers.testVersion {
103       package = powershell;
104       command = "HOME=$(mktemp -d) pwsh --version";
105     };
106     updateScript = writeShellScript "update-powershell" ''
107       set -o errexit
108       export PATH="${lib.makeBinPath [ common-updater-scripts curl gnused jq ]}"
109       NEW_VERSION=$(curl -s https://api.github.com/repos/PowerShell/PowerShell/releases/latest | jq .tag_name --raw-output | sed -e 's/v//')
111       if [[ "${version}" = "$NEW_VERSION" ]]; then
112         echo "The new version same as the old version."
113         exit 0
114       fi
116       for platform in ${lib.escapeShellArgs meta.platforms}; do
117         update-source-version "powershell" "$NEW_VERSION" --ignore-same-version --source-key="sources.$platform"
118       done
119     '';
120   };
122   meta = with lib; {
123     description = "Powerful cross-platform (Windows, Linux, and macOS) shell and scripting language based on .NET";
124     homepage = "https://microsoft.com/PowerShell";
125     license = licenses.mit;
126     mainProgram = "pwsh";
127     maintainers = with maintainers; [ wegank ];
128     platforms = builtins.attrNames passthru.sources;
129     sourceProvenance = with sourceTypes; [
130       binaryBytecode
131       binaryNativeCode
132     ];
133   };