forked from mirrors/nixpkgs
llvmPackages/libc++: Fix build against glibc 2.26
This is very similar to what we had in bb0b0822ef
.
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
This commit is contained in:
parent
03e8bed8b3
commit
44cb95a234
|
@ -20,7 +20,11 @@ stdenv.mkDerivation rec {
|
||||||
'"${libcxxabi}/lib/libc++abi.dylib"'
|
'"${libcxxabi}/lib/libc++abi.dylib"'
|
||||||
'';
|
'';
|
||||||
|
|
||||||
patches = [ ./darwin.patch ];
|
patches = [
|
||||||
|
./darwin.patch
|
||||||
|
# glibc 2.26 fix
|
||||||
|
./xlocale-glibc-2.26.patch
|
||||||
|
];
|
||||||
|
|
||||||
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
diff --git a/include/__locale b/include/__locale
|
||||||
|
index 3daa1f1..cb8e151 100644
|
||||||
|
--- a/include/__locale
|
||||||
|
+++ b/include/__locale
|
||||||
|
@@ -29,10 +29,10 @@
|
||||||
|
# if __ANDROID_API__ <= 20
|
||||||
|
# include <support/android/locale_bionic.h>
|
||||||
|
# endif
|
||||||
|
-#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
+#elif (defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
|| defined(__sun__) || defined(__EMSCRIPTEN__) || defined(__IBMCPP__))
|
||||||
|
# include <xlocale.h>
|
||||||
|
-#endif // __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
+#endif // __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
|
||||||
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
|
#pragma GCC system_header
|
|
@ -17,6 +17,8 @@ stdenv.mkDerivation rec {
|
||||||
patches = [
|
patches = [
|
||||||
./darwin.patch
|
./darwin.patch
|
||||||
./r242056.patch
|
./r242056.patch
|
||||||
|
# glibc 2.26 fix
|
||||||
|
./xlocale-glibc-2.26.patch
|
||||||
];
|
];
|
||||||
|
|
||||||
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
diff --git a/include/__locale b/include/__locale
|
||||||
|
index 1989558..1e42905 100644
|
||||||
|
--- a/include/__locale
|
||||||
|
+++ b/include/__locale
|
||||||
|
@@ -34,10 +34,10 @@
|
||||||
|
# include <support/solaris/xlocale.h>
|
||||||
|
#elif defined(_NEWLIB_VERSION)
|
||||||
|
# include <support/newlib/xlocale.h>
|
||||||
|
-#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
+#elif (defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
|| defined(__EMSCRIPTEN__) || defined(__IBMCPP__))
|
||||||
|
# include <xlocale.h>
|
||||||
|
-#endif // __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
+#endif // __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
|
||||||
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
|
#pragma GCC system_header
|
|
@ -14,7 +14,10 @@ stdenv.mkDerivation rec {
|
||||||
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$NIX_BUILD_TOP/libcxxabi-${version}.src/include")
|
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$NIX_BUILD_TOP/libcxxabi-${version}.src/include")
|
||||||
'';
|
'';
|
||||||
|
|
||||||
patches = lib.optional stdenv.isDarwin ./darwin.patch;
|
patches = [
|
||||||
|
# glibc 2.26 fix
|
||||||
|
../../3.9/libc++/xlocale-glibc-2.26.patch
|
||||||
|
] ++ lib.optional stdenv.isDarwin ./darwin.patch;
|
||||||
|
|
||||||
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,10 @@ stdenv.mkDerivation rec {
|
||||||
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$NIX_BUILD_TOP/libcxxabi-${version}.src/include")
|
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$NIX_BUILD_TOP/libcxxabi-${version}.src/include")
|
||||||
'';
|
'';
|
||||||
|
|
||||||
patches = lib.optional stdenv.isDarwin ./darwin.patch;
|
patches = [
|
||||||
|
# glibc 2.26 fix
|
||||||
|
./xlocale-glibc-2.26.patch
|
||||||
|
] ++ lib.optional stdenv.isDarwin ./darwin.patch;
|
||||||
|
|
||||||
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
diff --git a/include/__locale b/include/__locale
|
||||||
|
index 7bc701d..ea75c86 100644
|
||||||
|
--- a/include/__locale
|
||||||
|
+++ b/include/__locale
|
||||||
|
@@ -34,12 +34,12 @@
|
||||||
|
# include <support/solaris/xlocale.h>
|
||||||
|
#elif defined(_NEWLIB_VERSION)
|
||||||
|
# include <support/newlib/xlocale.h>
|
||||||
|
-#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
+#elif (defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
|| defined(__EMSCRIPTEN__) || defined(__IBMCPP__))
|
||||||
|
# include <xlocale.h>
|
||||||
|
#elif defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
|
# include <support/musl/xlocale.h>
|
||||||
|
-#endif // __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
+#endif // __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
|
||||||
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
|
#pragma GCC system_header
|
|
@ -10,8 +10,12 @@ stdenv.mkDerivation rec {
|
||||||
export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include"
|
export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
patches = [
|
||||||
# https://github.com/llvm-mirror/libcxx/commit/bcc92d75df0274b9593ebd097fcae60494e3bffc
|
# https://github.com/llvm-mirror/libcxx/commit/bcc92d75df0274b9593ebd097fcae60494e3bffc
|
||||||
patches = [ ./pthread_mach_thread_np.patch ];
|
./pthread_mach_thread_np.patch
|
||||||
|
# glibc 2.26 fix
|
||||||
|
./xlocale-glibc-2.26.patch
|
||||||
|
];
|
||||||
|
|
||||||
prePatch = ''
|
prePatch = ''
|
||||||
substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++"
|
substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++"
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
diff --git a/include/__locale b/include/__locale
|
||||||
|
index f4882de..29443b4 100644
|
||||||
|
--- a/include/__locale
|
||||||
|
+++ b/include/__locale
|
||||||
|
@@ -34,12 +34,12 @@
|
||||||
|
# include <support/solaris/xlocale.h>
|
||||||
|
#elif defined(_NEWLIB_VERSION)
|
||||||
|
# include <support/newlib/xlocale.h>
|
||||||
|
-#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
+#elif (defined(__APPLE__) || defined(__FreeBSD__) \
|
||||||
|
|| defined(__EMSCRIPTEN__) || defined(__IBMCPP__))
|
||||||
|
# include <xlocale.h>
|
||||||
|
#elif defined(_LIBCPP_HAS_MUSL_LIBC)
|
||||||
|
# include <support/musl/xlocale.h>
|
||||||
|
-#endif // __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
+#endif // __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__
|
||||||
|
|
||||||
|
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
|
||||||
|
#pragma GCC system_header
|
Loading…
Reference in a new issue