mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-27 00:57:50 +00:00
Add an upstream commit to fix libc++-related issues.
This should fix the build of unit tests in x11/kdelibs4 with clang and libc++, as reported in [1]. Bump PORTREVISION, as this changes an installed header. [1] http://lists.freebsd.org/pipermail/freebsd-ports/2013-September/085821.html
This commit is contained in:
parent
95a5854384
commit
e6e2732a2f
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=326778
@ -3,7 +3,7 @@
|
||||
|
||||
PORTNAME= corelib
|
||||
DISTVERSION= ${QT4_VERSION}
|
||||
PORTREVISION= 4
|
||||
PORTREVISION= 5
|
||||
CATEGORIES?= devel
|
||||
PKGNAMEPREFIX= qt4-
|
||||
|
||||
|
81
devel/qt4-corelib/files/patch-git_8d33f67
Normal file
81
devel/qt4-corelib/files/patch-git_8d33f67
Normal file
@ -0,0 +1,81 @@
|
||||
From 8d33f673d3aaa7107c8e86d6591bd3f077f0313d Mon Sep 17 00:00:00 2001
|
||||
From: Raphael Kubo da Costa <rakuco@FreeBSD.org>
|
||||
Date: Fri, 10 May 2013 04:08:38 +0300
|
||||
Subject: [PATCH] Special-case the forward declaration of STL types for libc++.
|
||||
|
||||
This is somewhat of a follow-up to 5210d47aa66214e3cb16f394d0510a91f770c1b1.
|
||||
libc++ declares the STL types in an inline namespace within the "std" one if
|
||||
clang is used.
|
||||
|
||||
If one includes a header such as <iterator> before a Qt one and builds with
|
||||
QT_NO_STL, the following ends up happening:
|
||||
|
||||
// <iterator>
|
||||
namespace std {
|
||||
inline namespace __1 {
|
||||
struct random_access_iterator ... ;
|
||||
}
|
||||
}
|
||||
|
||||
// qiterator.h
|
||||
#ifdef QT_NO_STL
|
||||
namespace std {
|
||||
struct random_access_iterator;
|
||||
}
|
||||
#endif
|
||||
|
||||
qiterator.h's declaration shadows the original one, and the compiler
|
||||
complains random_access_iterator lacks an actual declaration.
|
||||
|
||||
Solve this by checking for libc++ and forward-declaring the iterator types
|
||||
we need within the same inline namespace.
|
||||
|
||||
Not backported from qtbase because QT_NO_STL does not exist in Qt 5.
|
||||
|
||||
Change-Id: I6742d540f6538a30aa060a4447c288cfb9cd781d
|
||||
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
||||
---
|
||||
src/corelib/tools/qiterator.h | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/src/corelib/tools/qiterator.h b/src/corelib/tools/qiterator.h
|
||||
index c859d37..54c331e 100644
|
||||
--- src/corelib/tools/qiterator.h
|
||||
+++ src/corelib/tools/qiterator.h
|
||||
@@ -47,10 +47,33 @@
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
#ifdef QT_NO_STL
|
||||
+# include <ciso646> // No-op, indirectly include additional configuration headers.
|
||||
+# if defined(_LIBCPP_VERSION)
|
||||
+// libc++ may declare these structs in an inline namespace. Forward-declare
|
||||
+// these iterators in the same namespace so that we do not shadow the original
|
||||
+// declarations.
|
||||
+
|
||||
+// Tell clang not to warn about the use of inline namespaces when not building
|
||||
+// in C++11 mode.
|
||||
+# if defined(Q_CC_CLANG)
|
||||
+# pragma GCC diagnostic push
|
||||
+# pragma GCC diagnostic ignored "-Wc++11-extensions"
|
||||
+# endif
|
||||
+
|
||||
+_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
+ struct bidirectional_iterator_tag;
|
||||
+ struct random_access_iterator_tag;
|
||||
+_LIBCPP_END_NAMESPACE_STD
|
||||
+
|
||||
+# if defined(Q_CC_CLANG)
|
||||
+# pragma GCC diagnostic pop
|
||||
+# endif
|
||||
+# else
|
||||
namespace std {
|
||||
struct bidirectional_iterator_tag;
|
||||
struct random_access_iterator_tag;
|
||||
}
|
||||
+# endif
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
--
|
||||
1.8.4
|
||||
|
Loading…
Reference in New Issue
Block a user