1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-18 08:02:48 +00:00

Add my upstream commit to fix the build with clang and our old base libstdc++.

This commit is contained in:
Raphael Kubo da Costa 2012-05-28 18:48:02 +00:00
parent 1e7772782a
commit 263142fd23
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=297614

View File

@ -0,0 +1,132 @@
commit e37294eaa6694e4cf93012569f5ef947651f50e3
Author: Raphael Kubo da Costa <rakuco@FreeBSD.org>
Date: Mon May 28 15:40:15 2012 -0300
Look for ext/hash_map and unordered_map instead of checking gcc's version.
Follow-up to commits 9f8e8f662974a1035ea64f0ab9404b8858a02a57 and
5c59bd61b1df1b963959f086c5202689c084e0f3. The decision of whether to
include <ext/hash_map> or <unordered_map> for gcc/clang was based on
whether gcc > 4.3 was installed or whether clang was being used. The
latter implicitly assumed a recent enough libstdc++ version (ie. >=
4.3) was being used, which might not be the case on systems such as
FreeBSD and possibly OS X.
Instead of checking for compiler versions, we now look for these
headers: CMake first detects whether <unordered_map> is present and,
in case it is not, it looks for <ext/hash_map>. The checks in
languages/cpp/parser/parser.h have been updated as well. This should
cover all the cases being previously detected, as well as fix the
checks for FreeBSD and other systems where the build was failing
before with clang.
Reviewed-by: Millian Wolff
REVIEW: 105067
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8a3be21..ce2a828 100644
--- ./CMakeLists.txt
+++ ./CMakeLists.txt
@@ -34,6 +34,20 @@ add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS)
include_directories(${KDevelop_SOURCE_DIR} ${KDevelop_BINARY_DIR} ${KDE4_INCLUDES} )
+# TODO: Remove when LTS for g++ < 4.3 has ended.
+# See also: languages/cpp/parser/parser.h
+if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ include(CheckIncludeFileCXX)
+ check_include_file_cxx(unordered_map HAVE_UNORDERED_MAP)
+
+ if(HAVE_UNORDERED_MAP)
+ message(STATUS "Enabling c++0x support for unordered map")
+ add_definitions( -std=c++0x ) # For unordered_map
+ else(HAVE_UNORDERED_MAP)
+ check_include_file_cxx(ext/hash_map HAVE_EXT_HASH_MAP)
+ endif(HAVE_UNORDERED_MAP)
+endif(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+
# create config.h
include (ConfigureChecks.cmake)
configure_file (config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h )
diff --git a/config.h.cmake b/config.h.cmake
index 0c41fe4..d76b3df 100644
--- ./config.h.cmake
+++ ./config.h.cmake
@@ -8,4 +8,10 @@
/* Valgrind presence */
#cmakedefine HAVE_VALGRIND_H 1
+/* Whether <unordered_map> exists */
+#cmakedefine HAVE_UNORDERED_MAP 1
+
+/* Whether <ext/hash_map> exists */
+#cmakedefine HAVE_EXT_HASH_MAP 1
+
#endif // KDEVELOP_CONFIG_H
diff --git a/languages/cpp/CMakeLists.txt b/languages/cpp/CMakeLists.txt
index 1577a7b..94a9bec 100644
--- ./languages/cpp/CMakeLists.txt
+++ ./languages/cpp/CMakeLists.txt
@@ -9,22 +9,6 @@ include_directories(
add_definitions( -DKDE_DEFAULT_DEBUG_AREA=9007 )
-if(CMAKE_COMPILER_IS_GNUCXX)
- # TODO: Remove when LTS for g++ < 4.3 has ended.
- # See also: languages/cpp/parser/parser.h
- macro_ensure_version("4.3.0" "${_gcc_version}" GCC_IS_NEWER_THAN_4_3)
- if (GCC_IS_NEWER_THAN_4_3)
- message(STATUS "Enabling c++0x support for unordered map")
- add_definitions( -std=c++0x ) # For unordered_map
- else(GCC_IS_NEWER_THAN_4_3)
- add_definitions( -DGXX_LT_4_3 )
- endif (GCC_IS_NEWER_THAN_4_3)
-endif(CMAKE_COMPILER_IS_GNUCXX)
-if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
- # TODO: version check?
- add_definitions( -std=c++0x )
-endif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-
add_subdirectory(parser)
add_subdirectory(cppduchain)
add_subdirectory(tests)
diff --git a/languages/cpp/parser/parser.h b/languages/cpp/parser/parser.h
index c519891..f498868 100644
--- ./languages/cpp/parser/parser.h
+++ ./languages/cpp/parser/parser.h
@@ -20,6 +20,8 @@
#ifndef PARSER_H
#define PARSER_H
+#include "config.h"
+
#include "ast.h"
#include "lexer.h"
#include "commentparser.h"
@@ -30,18 +32,18 @@
#include <cppparserexport.h>
#include "commentformatter.h"
-#ifdef Q_CC_MSVC
-#include <hash_map>
-using namespace stdext;
+#if defined(HAVE_UNORDERED_MAP) // CXX-0
+#include <unordered_map>
+template <class Key, class Data>
+class hash_map : public std::unordered_map<Key, Data> { };
-#elif defined GXX_LT_4_3
+#elif defined(HAVE_EXT_HASH_MAP)
#include <ext/hash_map>
using namespace __gnu_cxx;
-#else // CXX-0
-#include <unordered_map>
-template <class Key, class Data>
-class hash_map : public std::unordered_map<Key, Data> { };
+#elif defined(Q_CC_MSVC)
+#include <hash_map>
+using namespace stdext;
#endif
class TokenStream;