diff options
author | Beren Minor <beren.minor+git@gmail.com> | 2014-12-31 11:17:21 (GMT) |
---|---|---|
committer | Beren Minor <beren.minor+git@gmail.com> | 2014-12-31 11:17:21 (GMT) |
commit | d1e6a29fd30337e86c346208661c00233fd223f7 (patch) | |
tree | e3085f86cb3b2cc2cdaba97ab5ad9082da4b7a1b | |
parent | 82e372d5fd09ef37ab1b2f1c1cc175df26648653 (diff) | |
download | Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.zip Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.tar.gz Ninja-d1e6a29fd30337e86c346208661c00233fd223f7.tar.bz2 |
Fix compilation errors on Visual Studio 2015 (_MSC_VER 1900).
-rwxr-xr-x | configure.py | 2 | ||||
-rw-r--r-- | src/deps_log.cc | 4 | ||||
-rw-r--r-- | src/hash_map.h | 21 |
3 files changed, 23 insertions, 4 deletions
diff --git a/configure.py b/configure.py index 0f34e77..fe71372 100755 --- a/configure.py +++ b/configure.py @@ -284,6 +284,8 @@ if platform.is_msvc(): '/wd4512', '/wd4800', '/wd4702', '/wd4819', # Disable warnings about passing "this" during initialization. '/wd4355', + # Disable warnings about ignored typedef in DbgHelp.h + '/wd4091', '/GR-', # Disable RTTI. # Disable size_t -> int truncation warning. # We never have strings or arrays larger than 2**31. diff --git a/src/deps_log.cc b/src/deps_log.cc index aa8eb23..bd47ebc 100644 --- a/src/deps_log.cc +++ b/src/deps_log.cc @@ -239,13 +239,13 @@ bool DepsLog::Load(const string& path, State* state, string* err) { if (buf[path_size - 1] == '\0') --path_size; if (buf[path_size - 1] == '\0') --path_size; if (buf[path_size - 1] == '\0') --path_size; - StringPiece path(buf, path_size); + StringPiece subpath(buf, path_size); // It is not necessary to pass in a correct slash_bits here. It will // either be a Node that's in the manifest (in which case it will already // have a correct slash_bits that GetNode will look up), or it is an // implicit dependency from a .d which does not affect the build command // (and so need not have its slashes maintained). - Node* node = state->GetNode(path, 0); + Node* node = state->GetNode(subpath, 0); // Check that the expected index matches the actual index. This can only // happen if two ninja processes write to the same deps log concurrently. diff --git a/src/hash_map.h b/src/hash_map.h index 77e7586..9b98ca8 100644 --- a/src/hash_map.h +++ b/src/hash_map.h @@ -50,7 +50,22 @@ unsigned int MurmurHash2(const void* key, size_t len) { return h; } -#ifdef _MSC_VER +#if (__cplusplus >= 201103L) || (_MSC_VER >= 1900) +#include <unordered_map> + +namespace std { +template<> +struct hash<StringPiece> { + typedef StringPiece argument_type; + typedef std::size_t result_type; + + result_type operator()(argument_type const& s) const { + return MurmurHash2(s.str_, s.len_); + } +}; +} + +#elif defined(_MSC_VER) #include <hash_map> using stdext::hash_map; @@ -102,7 +117,9 @@ struct hash<StringPiece> { /// mapping StringPiece => Foo*. template<typename V> struct ExternalStringHashMap { -#ifdef _MSC_VER +#if (__cplusplus >= 201103L) || (_MSC_VER >= 1900) + typedef std::unordered_map<StringPiece, V> Type; +#elif defined(_MSC_VER) typedef hash_map<StringPiece, V, StringPieceCmp> Type; #else typedef hash_map<StringPiece, V> Type; |