about summary refs log tree commit diff
path: root/pkgs/development/tools/misc/ycmd
diff options
context:
space:
mode:
authorCharles Strahan <charles@cstrahan.com>2017-02-06 02:43:58 -0500
committerCharles Strahan <charles@cstrahan.com>2017-02-06 04:11:03 -0500
commitb27edc45374309fb30b6b7454b4115e4923b17bf (patch)
tree3554ec586504ab38315b75a79301aeb570e78a27 /pkgs/development/tools/misc/ycmd
parent26e5b4210640dba7900a1e7e7761bc24d5434dff (diff)
downloadnixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar.gz
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar.bz2
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar.lz
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar.xz
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.tar.zst
nixlib-b27edc45374309fb30b6b7454b4115e4923b17bf.zip
ycmd: 2016-01-12 -> 2017-02-03
Also, remove wrapper bash script and symlink completion backends to
ycmd can find them.
Diffstat (limited to 'pkgs/development/tools/misc/ycmd')
-rw-r--r--pkgs/development/tools/misc/ycmd/default.nix63
1 files changed, 55 insertions, 8 deletions
diff --git a/pkgs/development/tools/misc/ycmd/default.nix b/pkgs/development/tools/misc/ycmd/default.nix
index 57b4fe99b2f8..2153305953ed 100644
--- a/pkgs/development/tools/misc/ycmd/default.nix
+++ b/pkgs/development/tools/misc/ycmd/default.nix
@@ -1,21 +1,26 @@
-{ stdenv, fetchgit, cmake, llvmPackages, boost, python2Packages
+{ stdenv, lib, fetchgit, cmake, llvmPackages, boost, python2Packages
+, gocode ? null
+, godef ? null
+, rustracerd ? null
 }:
 
 let
-  inherit (python2Packages) python mkPythonDerivation waitress frozendict bottle;
+  inherit (python2Packages) python mkPythonDerivation waitress frozendict bottle future argparse requests;
+  pathFixup =  "import os; os.environ['PATH'] = ('{0}:{1}' if os.getenv('PATH', '') != '' else '{1}').format('$program_PATH', os.getenv('PATH', ''))";
 in mkPythonDerivation rec {
-  name = "ycmd-2016-01-12";
+  name = "ycmd-${version}";
+  version = "2017-02-03";
   namePrefix = "";
 
   src = fetchgit {
     url = "git://github.com/Valloric/ycmd.git";
-    rev = "f982f6251c5ff85e3abe6e862aad8bcd19e85ece";
-    sha256 = "1g0hivv3wla7z5dgnkcn3ny38p089pjfj36nx6k29zmprgmjinyr";
+    rev = "ec7a154f8fe50c071ecd0ac6841de8a50ce92f5d";
+    sha256 = "0rzxgqqqmmrv9r4k2ji074iprhw6sb0jkvh84wvi45yfyphsh0xi";
   };
 
   buildInputs = [ cmake boost ];
 
-  propagatedBuildInputs = [ waitress frozendict bottle ];
+  propagatedBuildInputs = [ waitress frozendict bottle future argparse requests ];
 
   buildPhase = ''
     export EXTRA_CMAKE_ARGS=-DPATH_TO_LLVM_ROOT=${llvmPackages.clang-unwrapped}
@@ -24,10 +29,52 @@ in mkPythonDerivation rec {
 
   configurePhase = ":";
 
+  # remove the tests
+  #
+  # make __main__.py executable so mkPythonDerivation's postFixup modifies the
+  # executable (e.g. fixup PYTHONPATH)
+  #
+  # add a shebang (will be rewritten by postFixup)
+  #
+  # symlink completion backends where ycmd expects them
   installPhase = ''
-    mkdir -p $out/lib/ycmd/third_party $out/bin
-    cp -r ycmd/ CORE_VERSION libclang.so.* ycm_client_support.so ycm_core.so $out/lib/ycmd/
+    rm -rf ycmd/tests
+
+    chmod +x ycmd/__main__.py
+    sed -i "1i #!/usr/bin/env python\
+    " ycmd/__main__.py
+
+    mkdir -p $out/lib/ycmd
+    cp -r ycmd/ CORE_VERSION libclang.so.* ycm_core.so $out/lib/ycmd/
+
+    mkdir -p $out/bin
     ln -s $out/lib/ycmd/ycmd/__main__.py $out/bin/ycmd
+
+    mkdir -p $out/lib/ycmd/third_party/{gocode,godef,racerd/target/release}
+    cp -r third_party/JediHTTP/ $out/lib/ycmd/third_party
+  '' + lib.optionalString (gocode != null) ''
+    ln -s ${gocode}/bin/gocode $out/lib/ycmd/third_party/gocode
+  '' + lib.optionalString (godef != null) ''
+    ln -s ${godef}/bin/godef $out/lib/ycmd/third_party/godef
+  '' + lib.optionalString (rustracerd != null) ''
+    ln -s ${rustracerd}/bin/racerd $out/lib/ycmd/third_party/racerd/target/release
+  '';
+
+  # mkPythonDerivation will attempt to create a wrapper script (written in bash)
+  # but we don't want the indirection as several editor plugins want to invoke
+  # ycmd as `python path/to/ycmd`, which will obviously fail in that case -
+  # so we move the original file back over
+  #
+  # also fixup the argv[0] and replace __file__ with the corresponding path so
+  # python won't be thrown off by argv[0]
+  postFixup = ''
+    mv $out/lib/ycmd/ycmd/{.__main__.py-wrapped,__main__.py}
+
+    substituteInPlace $out/lib/ycmd/ycmd/__main__.py \
+      --replace $out/lib/ycmd/ycmd/__main__.py \
+                $out/bin/ycmd \
+      --replace __file__ \
+                "'$out/lib/ycmd/ycmd/__main__.py'"
   '';
 
   meta = with stdenv.lib; {