diff options
author | Jason Wilkins <Jason.A.Wilkins@gmail.com> | 2014-06-27 13:57:53 +0400 |
---|---|---|
committer | Jason Wilkins <Jason.A.Wilkins@gmail.com> | 2014-06-27 13:57:53 +0400 |
commit | 4f88d6d74c7e58fc4de8e86415ed67d36191372e (patch) | |
tree | cbc66fecc4e2e643d1dbe662335369dcbc246622 /build_files | |
parent | 4606950e81efe0c594f0e9908a6ab09691667255 (diff) | |
parent | cba34986298b89df2c56c90a04fdeb0155258187 (diff) |
Merge branch 'master' of git.blender.org:blender into soc-2014-viewport_fx
Diffstat (limited to 'build_files')
-rw-r--r-- | build_files/cmake/macros.cmake | 72 | ||||
-rw-r--r-- | build_files/scons/Modules/FindPython.py (renamed from build_files/scons/config/Modules/FindPython.py) | 0 | ||||
-rw-r--r-- | build_files/scons/Modules/FindSharedPtr.py | 42 | ||||
-rw-r--r-- | build_files/scons/Modules/FindUnorderedMap.py (renamed from build_files/scons/tools/unordered_map.py) | 22 | ||||
-rw-r--r-- | build_files/scons/Modules/__init__.py (renamed from build_files/scons/config/Modules/__init__.py) | 0 | ||||
-rw-r--r-- | build_files/scons/config/linux-config.py | 2 |
6 files changed, 129 insertions, 9 deletions
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 9c3f46322c1..9ba5864c5c4 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -793,6 +793,78 @@ macro(TEST_UNORDERED_MAP_SUPPORT) endif() endmacro() +macro(TEST_SHARED_PTR_SUPPORT) + # This check are coming from Ceres library. + # + # Find shared pointer header and namespace. + # + # This module defines the following variables: + # + # SHARED_PTR_FOUND: TRUE if shared_ptr found. + # SHARED_PTR_TR1_MEMORY_HEADER: True if <tr1/memory> header is to be used + # for the shared_ptr object, otherwise use <memory>. + # SHARED_PTR_TR1_NAMESPACE: TRUE if shared_ptr is defined in std::tr1 namespace, + # otherwise it's assumed to be defined in std namespace. + + include(CheckIncludeFileCXX) + set(SHARED_PTR_FOUND FALSE) + CHECK_INCLUDE_FILE_CXX(memory HAVE_STD_MEMORY_HEADER) + if(HAVE_STD_MEMORY_HEADER) + # Finding the memory header doesn't mean that shared_ptr is in std + # namespace. + # + # In particular, MSVC 2008 has shared_ptr declared in std::tr1. In + # order to support this, we do an extra check to see which namespace + # should be used. + include(CheckCXXSourceCompiles) + CHECK_CXX_SOURCE_COMPILES("#include <memory> + int main() { + std::shared_ptr<int> int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_STD_NAMESPACE) + + if(HAVE_SHARED_PTR_IN_STD_NAMESPACE) + message("-- Found shared_ptr in std namespace using <memory> header.") + set(SHARED_PTR_FOUND TRUE) + else() + CHECK_CXX_SOURCE_COMPILES("#include <memory> + int main() { + std::tr1::shared_ptr<int> int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_TR1_NAMESPACE) + if(HAVE_SHARED_PTR_IN_TR1_NAMESPACE) + message("-- Found shared_ptr in std::tr1 namespace using <memory> header.") + set(SHARED_PTR_TR1_NAMESPACE TRUE) + set(SHARED_PTR_FOUND TRUE) + endif() + endif() + endif() + + if(NOT SHARED_PTR_FOUND) + # Further, gcc defines shared_ptr in std::tr1 namespace and + # <tr1/memory> is to be included for this. And what makes things + # even more tricky is that gcc does have <memory> header, so + # all the checks above wouldn't find shared_ptr. + CHECK_INCLUDE_FILE_CXX("tr1/memory" HAVE_TR1_MEMORY_HEADER) + if(HAVE_TR1_MEMORY_HEADER) + CHECK_CXX_SOURCE_COMPILES("#include <tr1/memory> + int main() { + std::tr1::shared_ptr<int> int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER) + if(HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER) + message("-- Found shared_ptr in std::tr1 namespace using <tr1/memory> header.") + set(SHARED_PTR_TR1_MEMORY_HEADER TRUE) + set(SHARED_PTR_TR1_NAMESPACE TRUE) + set(SHARED_PTR_FOUND TRUE) + endif() + endif() + endif() +endmacro() + # when we have warnings as errors applied globally this # needs to be removed for some external libs which we dont maintain. diff --git a/build_files/scons/config/Modules/FindPython.py b/build_files/scons/Modules/FindPython.py index a0ead88ebb4..a0ead88ebb4 100644 --- a/build_files/scons/config/Modules/FindPython.py +++ b/build_files/scons/Modules/FindPython.py diff --git a/build_files/scons/Modules/FindSharedPtr.py b/build_files/scons/Modules/FindSharedPtr.py new file mode 100644 index 00000000000..848431f8271 --- /dev/null +++ b/build_files/scons/Modules/FindSharedPtr.py @@ -0,0 +1,42 @@ +def FindSharedPtr(conf): + """ + Detect shared_ptr availability + """ + + found = False + namespace = None + header = None + + if conf.CheckCXXHeader("memory"): + # Finding the memory header doesn't mean that shared_ptr is in std + # namespace. + # + # In particular, MSVC 2008 has shared_ptr declared in std::tr1. In + # order to support this, we do an extra check to see which namespace + # should be used. + + if conf.CheckType('std::shared_ptr<int>', language = 'CXX', includes="#include <memory>"): + print("-- Found shared_ptr in std namespace using <memory> header.") + namespace = 'std' + header = 'memory' + elif conf.CheckType('std::tr1::shared_ptr<int>', language = 'CXX', includes="#include <memory>"): + print("-- Found shared_ptr in std::tr1 namespace using <memory> header..") + namespace = 'std::tr1' + header = 'memory' + + if not namespace and conf.CheckCXXHeader("tr1/memory"): + # Further, gcc defines shared_ptr in std::tr1 namespace and + # <tr1/memory> is to be included for this. And what makes things + # even more tricky is that gcc does have <memory> header, so + # all the checks above wouldn't find shared_ptr. + if conf.CheckType('std::tr1::shared_ptr<int>', language = 'CXX', includes="#include <tr1/memory>"): + print("-- Found shared_ptr in std::tr1 namespace using <tr1/memory> header..") + namespace = 'std::tr1' + header = 'tr1/memory' + + if not namespace: + print("-- Unable to find shared_ptrred_map>.") + + conf.env['WITH_SHARED_PTR_SUPPORT'] = namespace and header + conf.env['SHARED_PTR_NAMESPACE'] = namespace + conf.env['SHARED_PTR_HEADER'] = header diff --git a/build_files/scons/tools/unordered_map.py b/build_files/scons/Modules/FindUnorderedMap.py index d314a777b0c..34073c1b0b9 100644 --- a/build_files/scons/tools/unordered_map.py +++ b/build_files/scons/Modules/FindUnorderedMap.py @@ -1,10 +1,11 @@ -def test_unordered_map(conf): +def FindUnorderedMap(conf): """ Detect unordered_map availability - - Returns (True/False, namespace, include prefix) """ + namespace = None + header = None + if conf.CheckCXXHeader("unordered_map"): # Even so we've found unordered_map header file it doesn't # mean unordered_map and unordered_set will be declared in @@ -17,16 +18,21 @@ def test_unordered_map(conf): if conf.CheckType('std::unordered_map<int, int>', language = 'CXX', includes="#include <unordered_map>"): print("-- Found unordered_map/set in std namespace.") - return True, 'std', '' + namespace = 'std' + header = 'unordered_map' elif conf.CheckType('std::tr1::unordered_map<int, int>', language = 'CXX', includes="#include <unordered_map>"): print("-- Found unordered_map/set in std::tr1 namespace.") - return True, 'std::tr1', '' + namespace = 'std::tr1' + header = 'unordered_map' else: print("-- Found <unordered_map> but can not find neither std::unordered_map nor std::tr1::unordered_map.") - return False, '', '' elif conf.CheckCXXHeader("tr1/unordered_map"): print("-- Found unordered_map/set in std::tr1 namespace.") - return True, 'std::tr1', 'tr1/' + namespace = 'std::tr1' + header = 'tr1/unordered_map' else: print("-- Unable to find <unordered_map> or <tr1/unordered_map>. ") - return False, '', '' + + conf.env['WITH_UNORDERED_MAP_SUPPORT'] = namespace and header + conf.env['UNORDERED_MAP_NAMESPACE'] = namespace + conf.env['UNORDERED_MAP_HEADER'] = header diff --git a/build_files/scons/config/Modules/__init__.py b/build_files/scons/Modules/__init__.py index e69de29bb2d..e69de29bb2d 100644 --- a/build_files/scons/config/Modules/__init__.py +++ b/build_files/scons/Modules/__init__.py diff --git a/build_files/scons/config/linux-config.py b/build_files/scons/config/linux-config.py index 8f2c5ca30f4..0c76aecfc4b 100644 --- a/build_files/scons/config/linux-config.py +++ b/build_files/scons/config/linux-config.py @@ -1,4 +1,4 @@ -from Modules.FindPython import FindPython +from FindPython import FindPython py = FindPython() |