Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-05-22 14:41:55 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-05-22 14:48:52 +0300
commit6115267a845a49bdf9a5d4c701fcf5b995fc499a (patch)
tree976e286d4ababadaaaa94775ea8d9ccc9b699ca2 /build_files
parente21af38f69577229c93cf46aab655384ee864948 (diff)
CMake: Solve compilation error with pre-compiled libraries and new GCC-6
Since version 6 G++ switched to C++11 by default, which breaks some logic around WITH_CXX11 checks in out CMake files, leading to compilation errors. This is easy to solve by explicitly enabling older C++ standard when C++11 was not explicitly enabled by CMake options. However, G++-6 will also use new ABI by default even if older standard was specified in the compiler options. This is being addressed by a special define flag. This tricks made it possible to use new G++-6 without need to recompile any of pre-compiled libraries. However, this might break compilation with existing system libraries, which might already be using new ABI. We can't address this automatically, so now we simply default WITH_C11 and WITH_CXX11 options to whatever defaults of the current compiler are. This means, for G++-6 we'll set WITH_CXX11 to truth. This should make linking with system libraries working just fine, but to make pre-compiled libraries we still might need to disable CXX11. This should work fine work for a new environments with G++-6 and install_deps script run from scratch there, because C++ standard will be the same for both Blender dependencies and Blender itself.
Diffstat (limited to 'build_files')
-rw-r--r--build_files/cmake/macros.cmake10
1 files changed, 9 insertions, 1 deletions
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 239371c227c..08d26e55ed4 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -803,7 +803,15 @@ macro(TEST_UNORDERED_MAP_SUPPORT)
# UNORDERED_MAP_NAMESPACE, namespace for unordered_map, if found
include(CheckIncludeFileCXX)
- CHECK_INCLUDE_FILE_CXX("unordered_map" HAVE_STD_UNORDERED_MAP_HEADER)
+
+ # Workaround for newer GCC (6.x+) where C++11 was enabled by default, which lead us
+ # to a situation when there is <unordered_map> include but which can't be used uless
+ # C++11 is enabled.
+ if(CMAKE_COMPILER_IS_GNUCC AND (NOT "${CMAKE_C_COMPILER_VERSION}" VERSION_LESS "6.0") AND (NOT WITH_CXX11))
+ set(HAVE_STD_UNORDERED_MAP_HEADER False)
+ else()
+ CHECK_INCLUDE_FILE_CXX("unordered_map" HAVE_STD_UNORDERED_MAP_HEADER)
+ endif()
if(HAVE_STD_UNORDERED_MAP_HEADER)
# Even so we've found unordered_map header file it doesn't
# mean unordered_map and unordered_set will be declared in