diff options
Diffstat (limited to 'pkgs/development/tools/omnisharp-roslyn/default.nix')
-rw-r--r-- | pkgs/development/tools/omnisharp-roslyn/default.nix | 108 |
1 files changed, 89 insertions, 19 deletions
diff --git a/pkgs/development/tools/omnisharp-roslyn/default.nix b/pkgs/development/tools/omnisharp-roslyn/default.nix index 3c51779c566..7cf36fd1f89 100644 --- a/pkgs/development/tools/omnisharp-roslyn/default.nix +++ b/pkgs/development/tools/omnisharp-roslyn/default.nix @@ -1,42 +1,112 @@ -{ stdenv +{ lib, stdenv +, fetchFromGitHub , fetchurl -, mono5 +, mono6 +, msbuild +, dotnet-sdk , makeWrapper +, unzip +, writeText }: -stdenv.mkDerivation rec { +let + + deps = map (package: stdenv.mkDerivation (with package; { + pname = name; + inherit version src; + + buildInputs = [ unzip ]; + unpackPhase = '' + unzip $src + chmod -R u+r . + function traverseRename () { + for e in * + do + t="$(echo "$e" | sed -e "s/%20/\ /g" -e "s/%2B/+/g")" + [ "$t" != "$e" ] && mv -vn "$e" "$t" + if [ -d "$t" ] + then + cd "$t" + traverseRename + cd .. + fi + done + } + + traverseRename + ''; + + installPhase = '' + runHook preInstall + + package=$out/lib/dotnet/${name}/${version} + mkdir -p $package + cp -r . $package + echo "{}" > $package/.nupkg.metadata + + runHook postInstall + ''; + + dontFixup = true; + })) + (import ./deps.nix { inherit fetchurl; }); + + nuget-config = writeText "NuGet.Config" '' + <?xml version="1.0" encoding="utf-8"?> + <configuration> + <packageSources> + <clear /> + </packageSources> + <fallbackPackageFolders> + ${lib.concatStringsSep "\n" (map (package: "<add key=\"${package}\" value=\"${package}/lib/dotnet\"/>") deps)} + </fallbackPackageFolders> + </configuration> + ''; + +in stdenv.mkDerivation rec { pname = "omnisharp-roslyn"; - version = "1.35.2"; + version = "1.37.12"; - src = fetchurl { - url = "https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v${version}/omnisharp-mono.tar.gz"; - sha256 = "0k4crybddqpcg1vi1ax1s85w4hlknz6kaqn4cvv279dkm9aqxbp8"; + src = fetchFromGitHub { + owner = "OmniSharp"; + repo = pname; + rev = "v${version}"; + sha256 = "0gyy49v3pslr0l0q6h8hzah4s0iwkhkyckyrj3g2cg08w20b10gw"; }; - nativeBuildInputs = [ makeWrapper ]; + nativeBuildInputs = [ makeWrapper msbuild ]; - preUnpack = '' - mkdir src - cd src - sourceRoot=. + buildPhase = '' + runHook preBuild + + HOME=$(pwd)/fake-home msbuild -r -p:Configuration=Release -p:RestoreConfigFile=${nuget-config} src/OmniSharp.Stdio.Driver/OmniSharp.Stdio.Driver.csproj + + runHook postBuild ''; installPhase = '' mkdir -p $out/bin - cd .. - cp -r src $out/ - ls -al $out/src - makeWrapper ${mono5}/bin/mono $out/bin/omnisharp \ - --add-flags "$out/src/OmniSharp.exe" + cp -r bin/Release/OmniSharp.Stdio.Driver/net472 $out/src + cp bin/Release/OmniSharp.Host/net472/SQLitePCLRaw* $out/src + mkdir $out/src/.msbuild + ln -s ${msbuild}/lib/mono/xbuild/* $out/src/.msbuild/ + rm $out/src/.msbuild/Current + mkdir $out/src/.msbuild/Current + ln -s ${msbuild}/lib/mono/xbuild/Current/* $out/src/.msbuild/Current/ + ln -s ${msbuild}/lib/mono/msbuild/Current/bin $out/src/.msbuild/Current/Bin + + makeWrapper ${mono6}/bin/mono $out/bin/omnisharp \ + --prefix PATH : ${dotnet-sdk}/bin \ + --add-flags "$out/src/OmniSharp.exe" ''; - meta = with stdenv.lib; { + meta = with lib; { description = "OmniSharp based on roslyn workspaces"; homepage = "https://github.com/OmniSharp/omnisharp-roslyn"; platforms = platforms.linux; license = licenses.mit; - maintainers = with maintainers; [ tesq0 ]; + maintainers = with maintainers; [ tesq0 ericdallo corngood ]; }; } |