This is very similar to what we had in bb0b0822ef39d987952a04ae61fb8071. The xlocale.h header is no longer existing in glibc version 2.26, so we need to avoid including it. I've tested building against all of the libcxx attributes of LLVM 3.5, 3.7, 3.8, 3.9, 4 and 5. All of them succeeded except version 3.5, which failed because of an unrelated issue (build of libc++abi has failed, one of its dependencies), so I only verified whether the patch applies cleanly. Signed-off-by: aszlig <aszlig@nix.build> Cc: @vcunat
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ lib, stdenv, fetch, cmake, llvm, libcxxabi, fixDarwinDylibNames, version }:
 | 
						|
 | 
						|
stdenv.mkDerivation rec {
 | 
						|
  name = "libc++-${version}";
 | 
						|
 | 
						|
  src = fetch "libcxx" "0k6cmjcxnp2pyl8xwy1wkyyckkmdrjddim94yf1gzjbjy9qi22jj";
 | 
						|
 | 
						|
  postUnpack = ''
 | 
						|
    unpackFile ${libcxxabi.src}
 | 
						|
    export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include"
 | 
						|
  '';
 | 
						|
 | 
						|
  patches = [
 | 
						|
    # https://github.com/llvm-mirror/libcxx/commit/bcc92d75df0274b9593ebd097fcae60494e3bffc
 | 
						|
    ./pthread_mach_thread_np.patch
 | 
						|
    # glibc 2.26 fix
 | 
						|
    ./xlocale-glibc-2.26.patch
 | 
						|
  ];
 | 
						|
 | 
						|
  prePatch = ''
 | 
						|
    substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++"
 | 
						|
  '';
 | 
						|
 | 
						|
  preConfigure = ''
 | 
						|
    # Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package
 | 
						|
    cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR")
 | 
						|
  '';
 | 
						|
 | 
						|
  nativeBuildInputs = [ cmake ];
 | 
						|
 | 
						|
  buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
 | 
						|
 | 
						|
  cmakeFlags = [
 | 
						|
    "-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib"
 | 
						|
    "-DLIBCXX_LIBCPPABI_VERSION=2"
 | 
						|
    "-DLIBCXX_CXX_ABI=libcxxabi"
 | 
						|
  ];
 | 
						|
 | 
						|
  enableParallelBuilding = true;
 | 
						|
 | 
						|
  linkCxxAbi = stdenv.isLinux;
 | 
						|
 | 
						|
  setupHook = ./setup-hook.sh;
 | 
						|
 | 
						|
  meta = {
 | 
						|
    homepage = http://libcxx.llvm.org/;
 | 
						|
    description = "A new implementation of the C++ standard library, targeting C++11";
 | 
						|
    license = with stdenv.lib.licenses; [ ncsa mit ];
 | 
						|
    platforms = stdenv.lib.platforms.unix;
 | 
						|
  };
 | 
						|
}
 |