nixpkgs/pkgs/shells/powershell/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

140 lines
4.1 KiB
Nix
Raw Normal View History

2023-09-24 23:37:50 +02:00
{ 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");
2018-05-30 03:08:50 +02:00
in
stdenv.mkDerivation rec {
pname = "powershell";
2023-09-24 23:37:50 +02:00
version = "7.3.7";
2018-05-30 03:08:50 +02:00
2023-09-24 23:37:50 +02:00
src = passthru.sources.${stdenv.hostPlatform.system}
or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
2018-05-30 03:08:50 +02:00
2023-05-30 10:04:59 +02:00
sourceRoot = ".";
2022-05-06 20:39:28 +02:00
strictDeps = true;
2018-05-30 03:08:50 +02:00
2023-09-24 23:37:50 +02:00
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
];
2023-09-24 23:37:50 +02:00
installPhase = ''
runHook preInstall
2023-09-24 23:37:50 +02:00
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
2021-05-18 16:36:25 +02:00
2023-05-30 06:23:31 +02:00
'' + lib.optionalString (stdenv.isLinux && stdenv.isx86_64) ''
2023-09-24 23:37:50 +02:00
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
2020-04-30 23:47:54 +02:00
2023-09-24 23:37:50 +02:00
'' + lib.optionalString stdenv.isLinux ''
patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $out/share/powershell/libcoreclrtraceptprovider.so
2023-09-24 23:37:50 +02:00
'' + ''
runHook postInstall
2018-05-30 03:08:50 +02:00
'';
dontStrip = true;
2023-09-24 23:37:50 +02:00
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-KSBsYw369fURSmoD/YyZm9CLEIbhDR12mRp1xLCJ4Wc=";
};
aarch64-linux = fetchurl {
url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-arm64.tar.gz";
hash = "sha256-GaAu3nD0xRqqE0Lm7Z5Da6YUQGiCFc5xHuJYDLKySGc=";
};
x86_64-darwin = fetchurl {
url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-osx-x64.tar.gz";
hash = "sha256-+6cy4PLpt3ZR7ui3H9rAg3C39kVryPtqE5HKzMpBa24=";
};
x86_64-linux = fetchurl {
url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-linux-x64.tar.gz";
hash = "sha256-GKsAH+A89/M1fxvw4C4yb7+ITcfD6Y4Oicb1K8AswwI=";
};
};
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
'';
};
2020-04-30 23:47:54 +02:00
meta = with lib; {
description = "Powerful cross-platform (Windows, Linux, and macOS) shell and scripting language based on .NET";
2023-09-24 23:37:50 +02:00
homepage = "https://microsoft.com/PowerShell";
license = licenses.mit;
mainProgram = "pwsh";
maintainers = with maintainers; [ wegank ];
platforms = builtins.attrNames passthru.sources;
sourceProvenance = with sourceTypes; [
binaryBytecode
binaryNativeCode
];
2018-05-30 03:08:50 +02:00
};
}