diff options
Diffstat (limited to 'pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp')
3 files changed, 267 insertions, 0 deletions
diff --git a/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix new file mode 100644 index 00000000000..d91cbccb808 --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/default.nix @@ -0,0 +1,152 @@ +{ lib +, fetchurl +, vscode-utils +, unzip +, patchelf +, makeWrapper +, icu +, stdenv +, openssl +, mono +}: + +let + # Get as close as possible as the `package.json` required version. + # This is what drives omnisharp. + rtDepsSrcsFromJson = lib.importJSON ./rt-deps-bin-srcs.json; + + rtDepsBinSrcs = builtins.mapAttrs (k: v: + let + # E.g: "OmniSharp-x86_64-linux" + kSplit = builtins.split "(__)" k; + name = builtins.elemAt kSplit 0; + system = builtins.elemAt kSplit 2; + in + { + inherit name system; + installPath = v.installPath; + binaries = v.binaries; + bin-src = fetchurl { + urls = v.urls; + inherit (v) sha256; + }; + } + ) + rtDepsSrcsFromJson; + + rtDepBinSrcByName = bSrcName: + rtDepsBinSrcs."${bSrcName}__${stdenv.targetPlatform.system}"; + + omnisharp = rtDepBinSrcByName "OmniSharp"; + vsdbgs = [ + (rtDepBinSrcByName "Debugger") + ] ++ lib.optionals (stdenv.isDarwin) [ + # Include the aarch64-darwin debugger binaries on x86_64-darwin. Even though OmniSharp will be + # running under Rosetta 2, debugging will fail to start if both sets of binaries are not present. + (rtDepsBinSrcs."Debugger__aarch64-darwin") + ]; + razor = rtDepBinSrcByName "Razor"; +in + +vscode-utils.buildVscodeMarketplaceExtension { + mktplcRef = { + name = "csharp"; + publisher = "ms-dotnettools"; + version = "1.23.16"; + sha256 = "sha256-fM4vcSMi2tEjIox9Twh2sRiFhXgAeRwAM9to3vtcSqI="; + }; + + nativeBuildInputs = [ + unzip + patchelf + makeWrapper + ]; + + postPatch = '' + declare ext_unique_id + # See below as to why we cannot take the whole basename. + ext_unique_id="$(basename "$out" | head -c 32)" + + # Fix 'Unable to connect to debuggerEventsPipeName .. exceeds the maximum length 107.' when + # attempting to launch a specific test in debug mode. The extension attemps to open + # a pipe in extension dir which would fail anyway. We change to target file path + # to a path in tmp dir with a short name based on the unique part of the nix store path. + # This is however a brittle patch as we're working on minified code. + # Hence the attempt to only hold on stable names. + # However, this really would better be fixed upstream. + sed -i \ + -E -e 's/(this\._pipePath=[a-zA-Z0-9_]+\.join\()([a-zA-Z0-9_]+\.getExtensionPath\(\)[^,]*,)/\1require("os").tmpdir(), "'"$ext_unique_id"'"\+/g' \ + "$PWD/dist/extension.js" + + unzip_to() { + declare src_zip="''${1?}" + declare target_dir="''${2?}" + mkdir -p "$target_dir" + if unzip "$src_zip" -d "$target_dir"; then + true + elif [[ "1" -eq "$?" ]]; then + 1>&2 echo "WARNING: unzip('$?' -> skipped files)." + else + 1>&2 echo "ERROR: unzip('$?')." + fi + } + + patchelf_add_icu_as_needed() { + declare elf="''${1?}" + declare icu_major_v="${ + with builtins; head (splitVersion (parseDrvName icu.name).version)}" + + for icu_lib in icui18n icuuc icudata; do + patchelf --add-needed "lib''${icu_lib}.so.$icu_major_v" "$elf" + done + } + + patchelf_common() { + declare elf="''${1?}" + + patchelf_add_icu_as_needed "$elf" + patchelf --add-needed "libssl.so" "$elf" + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc openssl.out icu.out ]}:\$ORIGIN" \ + "$elf" + } + + declare omnisharp_dir="$PWD/${omnisharp.installPath}" + unzip_to "${omnisharp.bin-src}" "$omnisharp_dir" + rm "$omnisharp_dir/bin/mono" + ln -s -T "${mono}/bin/mono" "$omnisharp_dir/bin/mono" + chmod a+x "$omnisharp_dir/run" + touch "$omnisharp_dir/install.Lock" + + '' + builtins.concatStringsSep "\n" (map (vsdbg: '' + declare vsdbg_dir="$PWD/${vsdbg.installPath}" + unzip_to "${vsdbg.bin-src}" "$vsdbg_dir" + chmod a+x "$vsdbg_dir/vsdbg-ui" + chmod a+x "$vsdbg_dir/vsdbg" + touch "$vsdbg_dir/install.complete" + touch "$vsdbg_dir/install.Lock" + + '') vsdbgs) + '' + declare razor_dir="$PWD/${razor.installPath}" + unzip_to "${razor.bin-src}" "$razor_dir" + chmod a+x "$razor_dir/rzls" + touch "$razor_dir/install.Lock" + + '' + lib.optionalString stdenv.isLinux '' + patchelf_common "$vsdbg_dir/vsdbg" + patchelf_common "$vsdbg_dir/vsdbg-ui" + patchelf_common "$razor_dir/rzls" + + '' + lib.optionalString stdenv.isDarwin '' + substituteInPlace $omnisharp_dir/etc/config \ + --replace "libmono-native-compat.dylib" "libmono-native.dylib" + ''; + + meta = with lib; { + description = "C# for Visual Studio Code (powered by OmniSharp)"; + homepage = "https://github.com/OmniSharp/omnisharp-vscode"; + license = licenses.mit; + maintainers = [ maintainers.jraygauthier ]; + platforms = [ "x86_64-linux" "x86_64-darwin" ]; + }; +} diff --git a/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json new file mode 100644 index 00000000000..13678d1097e --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/rt-deps-bin-srcs.json @@ -0,0 +1,94 @@ +{ + "OmniSharp__x86_64-darwin": { + "installPath": ".omnisharp/1.37.16", + "binaries": [ + "./mono.osx", + "./run" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/03c32aa6-7c7a-4936-82a0-fd8f816d112f/0ea1ea1eae48552a1992ed6df782353a/omnisharp-osx-1.37.16.zip", + "https://roslynomnisharp.blob.core.windows.net/releases/1.37.16/omnisharp-osx-1.37.16.zip" + ], + "sha256": "0hhgfx7zs1rljhn3n9c7lci7j15yp2448z3f1d3c47a95l1hmlip" + }, + "OmniSharp__x86_64-linux": { + "installPath": ".omnisharp/1.37.16", + "binaries": [ + "./mono.linux-x86_64", + "./run" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/03c32aa6-7c7a-4936-82a0-fd8f816d112f/9ae3ed99fc0c41c7139751dde6f2bc78/omnisharp-linux-x64-1.37.16.zip", + "https://roslynomnisharp.blob.core.windows.net/releases/1.37.16/omnisharp-linux-x64-1.37.16.zip" + ], + "sha256": "0a2basc6dw42fnjv9zz93ff0bsw2i3446gvcjx5mn5d8dasi483i" + }, + "Debugger__x86_64-darwin": { + "installPath": ".debugger/x86_64", + "binaries": [ + "./vsdbg-ui", + "./vsdbg" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/49f44239-bd47-4fb5-91be-4c91d7638fff/c1122f7141735472d9583c1124024c55/coreclr-debug-osx-x64.zip", + "https://vsdebugger.blob.core.windows.net/coreclr-debug-1-23-14/coreclr-debug-osx-x64.zip" + ], + "sha256": "08z3k0h25gdsbmlxwayd94672hp2z7zmwdmd0nyr9j82izj3ci2m" + }, + "Debugger__aarch64-darwin": { + "installPath": ".debugger/arm64", + "binaries": [ + "./vsdbg-ui", + "./vsdbg" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/49f44239-bd47-4fb5-91be-4c91d7638fff/96a88189c7904a517f3bb59b2dba8bd1/coreclr-debug-osx-arm64.zip", + "https://vsdebugger.blob.core.windows.net/coreclr-debug-1-23-14/coreclr-debug-osx-arm64.zip" + ], + "sha256": "113kz02ihvb4y5fj01wamqz2jsql2q7n7f55s9kzs9dsrmq5ffa0" + }, + "Debugger__aarch64-linux": { + "installPath": ".debugger", + "binaries": [ + "./vsdbg-ui", + "./vsdbg" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/49f44239-bd47-4fb5-91be-4c91d7638fff/7a723bfbda6d196c52084226b6835b36/coreclr-debug-linux-arm64.zip", + "https://vsdebugger.blob.core.windows.net/coreclr-debug-1-23-14/coreclr-debug-linux-arm64.zip" + ], + "sha256": "1d4a5q3f7qfk3jq2i4f6g50i9i4z8z7g8ss083y9n5c1yj3629kw" + }, + "Debugger__x86_64-linux": { + "installPath": ".debugger", + "binaries": [ + "./vsdbg-ui", + "./vsdbg" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/49f44239-bd47-4fb5-91be-4c91d7638fff/dd019b4c839f458596e26bfcfe6a3e7f/coreclr-debug-linux-x64.zip", + "https://vsdebugger.blob.core.windows.net/coreclr-debug-1-23-14/coreclr-debug-linux-x64.zip" + ], + "sha256": "0c5y0035sa07bl3m3iiqccqd92xjwpcfjrqhmi5xligk40q2i2gk" + }, + "Razor__x86_64-linux": { + "installPath": ".razor", + "binaries": [ + "./rzls" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/b8678010-2cd7-4201-a5e7-ba57920607d5/b846e9c7d7afdba54a72fae1dcb6c42c/razorlanguageserver-linux-x64-6.0.0-preview.5.21358.6.zip" + ], + "sha256": "0gb36nlb7fgcv03a0awna1qyrsky6ys5gkpsmvxc5j35f1yq337b" + }, + "Razor__x86_64-darwin": { + "installPath": ".razor", + "binaries": [ + "./rzls" + ], + "urls": [ + "https://download.visualstudio.microsoft.com/download/pr/b8678010-2cd7-4201-a5e7-ba57920607d5/ad846449769eb2ae810d0236823a6aaa/razorlanguageserver-osx-x64-6.0.0-preview.5.21358.6.zip" + ], + "sha256": "0iqinpwwlqwajdq4i1qbb9hfpfmgy17av95bpw02ad2f9fnyh572" + } +} diff --git a/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs new file mode 100755 index 00000000000..8c43231b1a7 --- /dev/null +++ b/pkgs/applications/editors/vscode/extensions/ms-dotnettools-csharp/update-bin-srcs @@ -0,0 +1,21 @@ +#!/usr/bin/env nix-shell +#!nix-shell -I nixpkgs=../../../.. -i bash -p curl jq unzip +set -euf -o pipefail + +declare scriptDir +scriptDir=$(cd "$(dirname "$0")"; pwd) +1>&2 echo "scriptDir='$scriptDir'" + +. "$scriptDir/../_maintainers/update-bin-srcs-lib.sh" + +declare extPublisher="ms-dotnettools" +declare extName="csharp" +declare defaultExtVersion="1.23.16" +declare extVersion="${1:-$defaultExtVersion}" + +formatExtRuntimeDeps \ + "$extPublisher" "$extName" "$extVersion" \ + | computeAndAttachExtRtDepsChecksums \ + | jqStreamToJson \ + | tee "$scriptDir/rt-deps-bin-srcs.json" \ + | jq '.' |