summary refs log tree commit diff
path: root/pkgs/development/tools/omnisharp-roslyn/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/tools/omnisharp-roslyn/default.nix')
-rw-r--r--pkgs/development/tools/omnisharp-roslyn/default.nix108
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 ];
   };
 
 }