Commit ab8d1276 authored by Clemens Lang's avatar Clemens Lang Committed by Mike Gabriel

In Types.h, don't use STL internals on libc++…

In Types.h, don't use STL internals on libc++ (605_nxcomp_Types.h-dont-use-STL-internals-on-libc++.full+lite.patch). The nx-libs-lite package does not compile on OS X Mavericks because Apple's clang compilers now default to compiling against the libc++ STL rather than (their outdated copy of) libstdc++. While the compiler still allows changing that, we should not rely on this being possible forever. The compiler chokes in Types.h, specifically the clear() methods in subclasses of vectors that use implementation details of the GNU STL. The attached patch fixes these compilation issues by not overriding the clear() method when compiling against libc++, since the libc++ headers seem to do essentially the same as the overriden method.
parent 96d5e74a
Description: In Types.h, don't use STL internals on libc++.
Author: Clemens Lang <cal@macports.org>
Abstract:
The nx-libs-lite package does not compile on OS X Mavericks because
Apple's clang compilers now default to compiling against the libc++ STL
rather than (their outdated copy of) libstdc++.
.
While the compiler still allows changing that, we should not rely on
this being possible forever.
.
The compiler chokes in Types.h, specifically the clear() methods in
subclasses of vectors that use implementation details of the GNU STL.
The attached patch fixes these compilation issues by not overriding the
clear() method when compiling against libc++, since the libc++ headers
seem to do essentially the same as the overriden method.
--- a/nxcomp/Types.h 2013-11-05 01:35:22.000000000 +0100
+++ b/nxcomp/Types.h 2013-11-05 01:37:30.000000000 +0100
@@ -55,6 +55,9 @@
return &*(vector < unsigned char >::begin());
}
+ // Avoid overriding clear() when using libc++. Fiddling with STL internals
+ // doesn't really seem like a good idea to me anyway.
+ #ifndef _LIBCPP_VECTOR
void clear()
{
#if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H)
@@ -95,12 +98,16 @@
#endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */
}
+ #endif /* #ifdef _LIBCPP_VECTOR */
};
class T_messages : public vector < Message * >
{
public:
+ // Avoid overriding clear() when using libc++. Fiddling with STL internals
+ // doesn't really seem like a good idea to me anyway.
+ #ifndef _LIBCPP_VECTOR
void clear()
{
#if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H)
@@ -141,6 +148,7 @@
#endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */
}
+ #endif /* #ifndef _LIBCPP_VECTOR */
};
typedef md5_byte_t * T_checksum;
#401_nxcomp_bigrequests-and-genericevent-extensions.full+lite.patch #401_nxcomp_bigrequests-and-genericevent-extensions.full+lite.patch
605_nxcomp_Types.h-dont-use-STL-internals-on-libc++.full+lite.patch
606_nx-X11_build-on-aarch64.full.patch 606_nx-X11_build-on-aarch64.full.patch
607_nxcomp_macosx-X11-launcher-in-private-tmp.full+lite.patch 607_nxcomp_macosx-X11-launcher-in-private-tmp.full+lite.patch
990_fix-DEBUG-and-TEST-builds.full.patch 990_fix-DEBUG-and-TEST-builds.full.patch
......
...@@ -55,6 +55,9 @@ class T_data : public vector < unsigned char > ...@@ -55,6 +55,9 @@ class T_data : public vector < unsigned char >
return &*(vector < unsigned char >::begin()); return &*(vector < unsigned char >::begin());
} }
// Avoid overriding clear() when using libc++. Fiddling with STL internals
// doesn't really seem like a good idea to me anyway.
#ifndef _LIBCPP_VECTOR
void clear() void clear()
{ {
#if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H)
...@@ -95,12 +98,16 @@ class T_data : public vector < unsigned char > ...@@ -95,12 +98,16 @@ class T_data : public vector < unsigned char >
#endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */ #endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */
} }
#endif /* #ifdef _LIBCPP_VECTOR */
}; };
class T_messages : public vector < Message * > class T_messages : public vector < Message * >
{ {
public: public:
// Avoid overriding clear() when using libc++. Fiddling with STL internals
// doesn't really seem like a good idea to me anyway.
#ifndef _LIBCPP_VECTOR
void clear() void clear()
{ {
#if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H)
...@@ -141,6 +148,7 @@ class T_messages : public vector < Message * > ...@@ -141,6 +148,7 @@ class T_messages : public vector < Message * >
#endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */ #endif /* #if defined(__STL_USE_STD_ALLOCATORS) || defined(__GLIBCPP_INTERNAL_VECTOR_H) */
} }
#endif /* #ifndef _LIBCPP_VECTOR */
}; };
typedef md5_byte_t * T_checksum; typedef md5_byte_t * T_checksum;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment