diff options
Diffstat (limited to 'pkgs/development/tools/omnisharp-roslyn/default.nix')
-rw-r--r-- | pkgs/development/tools/omnisharp-roslyn/default.nix | 104 |
1 files changed, 83 insertions, 21 deletions
diff --git a/pkgs/development/tools/omnisharp-roslyn/default.nix b/pkgs/development/tools/omnisharp-roslyn/default.nix index e0710079b62..a07f2f91156 100644 --- a/pkgs/development/tools/omnisharp-roslyn/default.nix +++ b/pkgs/development/tools/omnisharp-roslyn/default.nix @@ -1,42 +1,104 @@ { lib, stdenv +, fetchFromGitHub , fetchurl -, mono +, mono6 , msbuild , dotnet-sdk , makeWrapper -, dotnetPackages +, 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.37.8"; - src = fetchurl { - url = "https://github.com/OmniSharp/omnisharp-roslyn/releases/download/v${version}/omnisharp-mono.tar.gz"; - sha256 = "0kgv4l15rli9a7grmcsbv72csmxi7vqa7lrrr8bd4cq9ighh54q3"; + src = fetchFromGitHub { + owner = "OmniSharp"; + repo = pname; + rev = "v${version}"; + sha256 = "1zi31m6ngk4rm7444n6q7mim096w5h4j2biwmvwmcf5yvig845za"; }; - nativeBuildInputs = [ makeWrapper dotnet-sdk dotnetPackages.Nuget ]; + 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/ - rm -r $out/src/.msbuild - cp -r ${msbuild}/lib/mono/msbuild $out/src/.msbuild - - chmod -R u+w $out/src - mv $out/src/.msbuild/Current/{bin,Bin} + 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 ${mono}/bin/mono $out/bin/omnisharp \ - --add-flags "$out/src/OmniSharp.exe" + makeWrapper ${mono6}/bin/mono $out/bin/omnisharp \ + --prefix PATH : ${dotnet-sdk}/bin \ + --add-flags "$out/src/OmniSharp.exe" ''; meta = with lib; { @@ -44,7 +106,7 @@ stdenv.mkDerivation rec { homepage = "https://github.com/OmniSharp/omnisharp-roslyn"; platforms = platforms.linux; license = licenses.mit; - maintainers = with maintainers; [ tesq0 ericdallo ]; + maintainers = with maintainers; [ tesq0 ericdallo corngood ]; }; } |