nixpkgs/pkgs/development/tools/misc/ycmd/default.nix
Sirio Balmelli dfc7bdb1a3
ycmd: install phase copies all dirs below 'third_party'
Copy _all_ of 'third_party'.
Cherry-picking the contents of this dir is a fragile approach as
they change in later commits (breaking this build).

This approach continues to work on the current build,
and will not break with later versions of the project.

Signed-off-by: Sirio Balmelli <sirio@b-ad.ch>
2019-09-20 21:33:37 +02:00

85 lines
2.7 KiB
Nix

{ stdenv, lib, fetchgit, cmake, llvmPackages, boost, python
, gocode ? null
, godef ? null
, rustracerd ? null
, fixDarwinDylibNames, Cocoa ? null
}:
stdenv.mkDerivation {
pname = "ycmd";
version = "2018-09-20";
src = fetchgit {
url = "https://github.com/Valloric/ycmd.git";
rev = "bf658fd78722c517674c0aaf2381e199bca8f163";
sha256 = "1lwa8xr76vapfpncvp81cn3m9219yw14fl7fzk5gnly60zkphbbl";
};
nativeBuildInputs = [ cmake ];
buildInputs = [ boost llvmPackages.libclang ]
++ stdenv.lib.optional stdenv.isDarwin [ fixDarwinDylibNames Cocoa ];
buildPhase = ''
export EXTRA_CMAKE_ARGS=-DPATH_TO_LLVM_ROOT=${llvmPackages.clang-unwrapped}
${python.interpreter} build.py --system-libclang --clang-completer --system-boost
'';
dontConfigure = true;
# remove the tests
#
# make __main__.py executable and add shebang
#
# copy over third-party libs
# note: if we switch to using our packaged libs, we'll need to symlink them
# into the same spots, as YouCompleteMe (the vim plugin) expects those paths
# to be available
#
# symlink completion backends where ycmd expects them
installPhase = ''
rm -rf ycmd/tests
chmod +x ycmd/__main__.py
sed -i "1i #!${python.interpreter}\
" ycmd/__main__.py
mkdir -p $out/lib/ycmd
cp -r ycmd/ CORE_VERSION libclang.so.* libclang.dylib* 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}
# Copy everything: the structure of third_party has been known to change.
# When linking our own libraries below, do so with '-f'
# to clobber anything we may have copied here.
cp -r third_party/* $out/lib/ycmd/third_party/
'' + lib.optionalString (gocode != null) ''
ln -sf ${gocode}/bin/gocode $out/lib/ycmd/third_party/gocode
'' + lib.optionalString (godef != null) ''
ln -sf ${godef}/bin/godef $out/lib/ycmd/third_party/godef
'' + lib.optionalString (rustracerd != null) ''
ln -sf ${rustracerd}/bin/racerd $out/lib/ycmd/third_party/racerd/target/release
'';
# fixup the argv[0] and replace __file__ with the corresponding path so
# python won't be thrown off by argv[0]
postFixup = ''
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; {
description = "A code-completion and comprehension server";
homepage = https://github.com/Valloric/ycmd;
license = licenses.gpl3;
maintainers = with maintainers; [ rasendubi cstrahan lnl7 ];
platforms = platforms.all;
};
}