Fix libmv build on OS X with 10.5 SDK. The tr1::unordered_map implementation
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 11 Sep 2012 11:54:10 +0000 (11:54 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Tue, 11 Sep 2012 11:54:10 +0000 (11:54 +0000)
is broken in this SDK, now it uses the boost implementation instead.

extern/libmv/third_party/ceres/SConscript
extern/libmv/third_party/ceres/internal/ceres/collections_port.h

index 6b5f1b8d64d8ae4a47ee7aefdb0019188c492e35..c629fa0017685d0b27d9c7f666b946729dbf3b05 100644 (file)
@@ -25,6 +25,11 @@ defs.append('CERES_RESTRICT_SCHUR_SPECIALIZATION')
 
 incs = '. ../../ ../../../Eigen3 ./include ./internal ../gflags'
 
+# work around broken hashtable in 10.5 SDK
+if env['OURPLATFORM'] == 'darwin' and env['WITH_BF_BOOST']:
+    incs += ' ' + env['BF_BOOST_INC']
+    defs.append('CERES_HASH_BOOST')
+
 if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', 'win64-mingw'):
     if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
         incs += ' ../msinttypes'
index 6f8a830a85e754eefe5f8d491f12c887716bc063..9dff0efe2451fdd304be671ca4abfbb6a5b094f7 100644 (file)
 #ifndef CERES_INTERNAL_COLLECTIONS_PORT_H_
 #define CERES_INTERNAL_COLLECTIONS_PORT_H_
 
+#ifdef CERES_HASH_BOOST
+#include <boost/tr1/unordered_map.hpp>
+#include <boost/tr1/unordered_set.hpp>
+#else
 #if defined(_MSC_VER) && _MSC_VER <= 1700
 #include <unordered_map>
 #include <unordered_set>
@@ -40,6 +44,8 @@
 #include <tr1/unordered_map>
 #include <tr1/unordered_set>
 #endif
+#endif
+
 #include <utility>
 #include "ceres/integral_types.h"
 #include "ceres/internal/port.h"
@@ -118,7 +124,11 @@ CERES_HASH_NAMESPACE_START
 
 // Hasher for STL pairs. Requires hashers for both members to be defined.
 template<typename T>
+#ifdef CERES_HASH_BOOST
+struct hash {
+#else
 struct hash<pair<T, T> > {
+#endif
   size_t operator()(const pair<T, T>& p) const {
     size_t h1 = hash<T>()(p.first);
     size_t h2 = hash<T>()(p.second);