diff options
Diffstat (limited to 'nixpkgs/pkgs/shells/powershell/default.nix')
-rw-r--r-- | nixpkgs/pkgs/shells/powershell/default.nix | 172 |
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"; - }; - } |