youcompleteme: fix compilation

1) Replace --system-libclang with an explicit setting for the path to
nix libclang 3.9. Otherwise it will find system's libclang on darwin.

2) Remove clang/llvm from build inputs. This prevents ycm itself from
being compiled by clang 3.9. stdenv's standard compiler (gcc or
clang 3.7) will suffice.

3) Enable C++11 again as #16212 is caused by incopatibility between
clang 3.9 and libc++ 3.7, but we don't compile YCM with clang 3.9, so
this is not needed anymore.
This commit is contained in:
Dmitry Kalinkin 2016-12-30 21:57:50 -05:00
parent 2cac374241
commit f37c7e01d5
No known key found for this signature in database
GPG Key ID: 5157B3EC8B2CA333
3 changed files with 14 additions and 24 deletions

View File

@ -1309,17 +1309,18 @@ rec {
dependencies = [];
buildInputs = [
python go cmake
(if stdenv.isDarwin then llvmPackages.clang else llvmPackages.clang-unwrapped)
llvmPackages.llvm
] ++ stdenv.lib.optional stdenv.isDarwin Cocoa;
propagatedBuildInputs = stdenv.lib.optional (!stdenv.isDarwin) rustracerd;
patches = [
./patches/youcompleteme/1-top-cmake.patch
./patches/youcompleteme/2-ycm-cmake.patch
];
# YCM requires path to external libclang 3.9
# For explicit use and as env variable for ../third_party/ycmd/build.py
EXTRA_CMAKE_ARGS="-DEXTERNAL_LIBCLANG_PATH=${llvmPackages.clang.cc}/lib/libclang.${if stdenv.isDarwin then "dylib" else "so"}";
buildPhase = ''
patchShebangs .
substituteInPlace plugin/youcompleteme.vim \
@ -1327,9 +1328,10 @@ rec {
mkdir build
pushd build
cmake -G "Unix Makefiles" . ../third_party/ycmd/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 -DUSE_CLANG_COMPLETER=ON -DUSE_SYSTEM_LIBCLANG=ON
cmake -G "Unix Makefiles" . ../third_party/ycmd/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 -DUSE_CLANG_COMPLETER=ON \
$EXTRA_CMAKE_ARGS
make ycm_core -j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
${python}/bin/python ../third_party/ycmd/build.py --gocode-completer --clang-completer --system-libclang
${python}/bin/python ../third_party/ycmd/build.py --gocode-completer --clang-completer
popd
'';

View File

@ -1,14 +0,0 @@
--- ./third_party/ycmd/cpp/CMakeLists.txt
+++ ./third_party/ycmd/cpp/CMakeLists.txt
@@ -121,8 +121,8 @@
set( CPP11_AVAILABLE true )
endif()
elseif( COMPILER_IS_CLANG )
- set( CPP11_AVAILABLE true )
- set( CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11" )
+ #set( CPP11_AVAILABLE true )
+ # set( CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11" )
set( CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++" )
endif()

View File

@ -1,16 +1,17 @@
buildInputs = [
python go cmake
(if stdenv.isDarwin then llvmPackages.clang else llvmPackages.clang-unwrapped)
llvmPackages.llvm
] ++ stdenv.lib.optional stdenv.isDarwin Cocoa;
propagatedBuildInputs = stdenv.lib.optional (!stdenv.isDarwin) rustracerd;
patches = [
./patches/youcompleteme/1-top-cmake.patch
./patches/youcompleteme/2-ycm-cmake.patch
];
# YCM requires path to external libclang 3.9
# For explicit use and as env variable for ../third_party/ycmd/build.py
EXTRA_CMAKE_ARGS="-DEXTERNAL_LIBCLANG_PATH=${llvmPackages.clang.cc}/lib/libclang.${if stdenv.isDarwin then "dylib" else "so"}";
buildPhase = ''
patchShebangs .
substituteInPlace plugin/youcompleteme.vim \
@ -18,9 +19,10 @@
mkdir build
pushd build
cmake -G "Unix Makefiles" . ../third_party/ycmd/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 -DUSE_CLANG_COMPLETER=ON -DUSE_SYSTEM_LIBCLANG=ON
cmake -G "Unix Makefiles" . ../third_party/ycmd/cpp -DPYTHON_LIBRARIES:PATH=${python}/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR:PATH=${python}/include/python2.7 -DUSE_CLANG_COMPLETER=ON \
$EXTRA_CMAKE_ARGS
make ycm_core -j''${NIX_BUILD_CORES} -l''${NIX_BUILD_CORES}}
${python}/bin/python ../third_party/ycmd/build.py --gocode-completer --clang-completer --system-libclang
${python}/bin/python ../third_party/ycmd/build.py --gocode-completer --clang-completer
popd
'';