diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/io/Archive.cc openvdb-7.0.0/openvdb/openvdb/io/Archive.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/io/Archive.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/io/Archive.cc	2020-06-19 10:01:11.064053300 +0300
@@ -31,7 +31,7 @@
 
 #include <tbb/atomic.h>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <boost/interprocess/detail/os_file_functions.hpp> // open_existing_file(), close_file()
 extern "C" __declspec(dllimport) bool __stdcall GetFileTime(
     void* fh, void* ctime, void* atime, void* mtime);
@@ -455,7 +455,7 @@
         mLastWriteTime = this->getLastWriteTime();
 
         if (mAutoDelete) {
-#ifndef _MSC_VER
+#ifndef _WIN32
             // On Unix systems, unlink the file so that it gets deleted once it is closed.
             ::unlink(mMap.get_name());
 #endif
@@ -485,7 +485,7 @@
         Index64 result = 0;
         const char* filename = mMap.get_name();
 
-#ifdef _MSC_VER
+#ifdef _WIN32
         // boost::interprocess::detail was renamed to boost::interprocess::ipcdetail in Boost 1.48.
         using namespace boost::interprocess::detail;
         using namespace boost::interprocess::ipcdetail;
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/io/Compression.h openvdb-7.0.0/openvdb/openvdb/io/Compression.h
--- openvdb-7.0.0-orig/openvdb/openvdb/io/Compression.h	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/io/Compression.h	2020-06-19 10:07:32.048448500 +0300
@@ -419,7 +419,7 @@
         writeData<HalfT>(os, reinterpret_cast<const HalfT*>(&halfData[0]), count, compression);
     }
 };
-#ifdef _MSC_VER
+#ifdef _WIN32
 /// Specialization to avoid double to float warnings in MSVC
 template<>
 struct HalfWriter</*IsReal=*/true, double> {
@@ -442,7 +442,7 @@
         writeData<HalfT>(os, reinterpret_cast<const HalfT*>(&halfData[0]), count, compression);
     }
 };
-#endif // _MSC_VER
+#endif // _WIN32
 
 
 ////////////////////////////////////////
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/io/File.cc openvdb-7.0.0/openvdb/openvdb/io/File.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/io/File.cc	2020-06-19 09:46:15.633240000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/io/File.cc	2020-06-19 10:09:01.356479800 +0300
@@ -10,7 +10,7 @@
 #include <openvdb/util/logging.h>
 #include <cstdint>
 #include <boost/iostreams/copy.hpp>
-#ifndef _MSC_VER
+#ifndef _WIN32
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -213,7 +213,7 @@
 
     std::string mesg = "could not get size of file " + filename();
 
-#ifdef _MSC_VER
+#ifdef _WIN32
     // Get the file size by seeking to the end of the file.
     std::ifstream fstrm(filename());
     if (fstrm) {
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/tools/ValueTransformer.h openvdb-7.0.0/openvdb/openvdb/tools/ValueTransformer.h
--- openvdb-7.0.0-orig/openvdb/openvdb/tools/ValueTransformer.h	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/tools/ValueTransformer.h	2020-06-19 10:16:07.301481100 +0300
@@ -138,7 +138,7 @@
     XformOp& op, bool threaded = true, bool shareOp = true,
     MergePolicy merge = MERGE_ACTIVE_STATES);
 
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename InIterT, typename OutGridT, typename XformOp>
 inline void transformValues(const InIterT& inIter, OutGridT& outGrid,
     const XformOp& op, bool threaded = true, bool shareOp = true,
@@ -594,7 +594,7 @@
     }
 }
 
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename InIterT, typename OutGridT, typename XformOp>
 inline void
 transformValues(const InIterT& inIter, OutGridT& outGrid, const XformOp& op,
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/tree/Tree.h openvdb-7.0.0/openvdb/openvdb/tree/Tree.h
--- openvdb-7.0.0-orig/openvdb/openvdb/tree/Tree.h	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/tree/Tree.h	2020-06-19 10:18:41.197865800 +0300
@@ -766,7 +766,7 @@
     /// @endcode
     template<typename CombineOp>
     void combine(Tree& other, CombineOp& op, bool prune = false);
-#ifndef _MSC_VER
+#ifndef _WIN32
     template<typename CombineOp>
     void combine(Tree& other, const CombineOp& op, bool prune = false);
 #endif
@@ -811,7 +811,7 @@
     /// @endcode
     template<typename ExtendedCombineOp>
     void combineExtended(Tree& other, ExtendedCombineOp& op, bool prune = false);
-#ifndef _MSC_VER
+#ifndef _WIN32
     template<typename ExtendedCombineOp>
     void combineExtended(Tree& other, const ExtendedCombineOp& op, bool prune = false);
 #endif
@@ -846,7 +846,7 @@
     /// @endcode
     template<typename CombineOp, typename OtherTreeType /*= Tree*/>
     void combine2(const Tree& a, const OtherTreeType& b, CombineOp& op, bool prune = false);
-#ifndef _MSC_VER
+#ifndef _WIN32
     template<typename CombineOp, typename OtherTreeType /*= Tree*/>
     void combine2(const Tree& a, const OtherTreeType& b, const CombineOp& op, bool prune = false);
 #endif
@@ -927,7 +927,7 @@
     template<typename ExtendedCombineOp, typename OtherTreeType /*= Tree*/>
     void combine2Extended(const Tree& a, const OtherTreeType& b, ExtendedCombineOp& op,
         bool prune = false);
-#ifndef _MSC_VER
+#ifndef _WIN32
     template<typename ExtendedCombineOp, typename OtherTreeType /*= Tree*/>
     void combine2Extended(const Tree& a, const OtherTreeType& b, const ExtendedCombineOp&,
         bool prune = false);
@@ -1901,7 +1901,7 @@
 
 /// @internal This overload is needed (for ICC and GCC, but not for VC) to disambiguate
 /// code like this: <tt>aTree.combine(bTree, MyCombineOp(...))</tt>.
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename RootNodeType>
 template<typename CombineOp>
 inline void
@@ -1925,7 +1925,7 @@
 
 /// @internal This overload is needed (for ICC and GCC, but not for VC) to disambiguate
 /// code like this: <tt>aTree.combineExtended(bTree, MyCombineOp(...))</tt>.
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename RootNodeType>
 template<typename ExtendedCombineOp>
 inline void
@@ -1949,7 +1949,7 @@
 
 /// @internal This overload is needed (for ICC and GCC, but not for VC) to disambiguate
 /// code like this: <tt>tree.combine2(aTree, bTree, MyCombineOp(...))</tt>.
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename RootNodeType>
 template<typename CombineOp, typename OtherTreeType>
 inline void
@@ -1975,7 +1975,7 @@
 /// @internal This overload is needed (for ICC and GCC, but not for VC) to disambiguate
 /// code like the following, where the functor argument is a temporary:
 /// <tt>tree.combine2Extended(aTree, bTree, MyCombineOp(...))</tt>.
-#ifndef _MSC_VER
+#ifndef _WIN32
 template<typename RootNodeType>
 template<typename ExtendedCombineOp, typename OtherTreeType>
 inline void
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestAttributeArray.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestAttributeArray.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestAttributeArray.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestAttributeArray.cc	2020-06-19 10:19:10.384757000 +0300
@@ -27,7 +27,7 @@
 #include <sstream>
 #include <iostream>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <boost/interprocess/detail/os_file_functions.hpp> // open_existing_file(), close_file()
 // boost::interprocess::detail was renamed to boost::interprocess::ipcdetail in Boost 1.48.
 // Ensure that both namespaces exist.
@@ -1419,7 +1419,7 @@
 
     std::string tempDir;
     if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
     if (tempDir.empty()) {
         char tempDirBuffer[MAX_PATH+1];
         int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointConversion.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestPointConversion.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointConversion.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestPointConversion.cc	2020-06-19 12:00:35.389981600 +0300
@@ -9,7 +9,7 @@
 #include <openvdb/points/PointCount.h>
 #include <openvdb/points/PointGroup.h>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
@@ -277,7 +277,7 @@
 
     std::string tempDir;
     if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
     if (tempDir.empty()) {
         char tempDirBuffer[MAX_PATH+1];
         int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointCount.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestPointCount.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointCount.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestPointCount.cc	2020-06-19 12:00:58.426944400 +0300
@@ -16,7 +16,7 @@
 #include <string>
 #include <vector>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
@@ -207,7 +207,7 @@
 
     std::string tempDir;
     if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
     if (tempDir.empty()) {
         char tempDirBuffer[MAX_PATH+1];
         int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
@@ -546,7 +546,7 @@
 
     std::string tempDir;
     if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
     if (tempDir.empty()) {
         char tempDirBuffer[MAX_PATH+1];
         int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointDelete.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestPointDelete.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointDelete.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestPointDelete.cc	2020-06-19 12:01:13.351915700 +0300
@@ -9,7 +9,7 @@
 #include <string>
 #include <vector>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointGroup.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestPointGroup.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestPointGroup.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestPointGroup.cc	2020-06-19 12:01:32.402067800 +0300
@@ -13,7 +13,7 @@
 #include <string>
 #include <vector>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <windows.h>
 #endif
 
@@ -502,7 +502,7 @@
 
         std::string tempDir;
         if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
         if (tempDir.empty()) {
             char tempDirBuffer[MAX_PATH+1];
             int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
diff -Naur openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestStreamCompression.cc openvdb-7.0.0/openvdb/openvdb/unittest/TestStreamCompression.cc
--- openvdb-7.0.0-orig/openvdb/openvdb/unittest/TestStreamCompression.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb/openvdb/unittest/TestStreamCompression.cc	2020-06-19 12:02:28.116963900 +0300
@@ -26,7 +26,7 @@
 
 #include <tbb/atomic.h>
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 #include <boost/interprocess/detail/os_file_functions.hpp> // open_existing_file(), close_file()
 // boost::interprocess::detail was renamed to boost::interprocess::ipcdetail in Boost 1.48.
 // Ensure that both namespaces exist.
@@ -72,7 +72,7 @@
         {
             mLastWriteTime = 0;
             const char* regionFilename = mMap.get_name();
-#ifdef _MSC_VER
+#ifdef _WIN32
             using namespace boost::interprocess::detail;
             using namespace boost::interprocess::ipcdetail;
             using openvdb::Index64;
@@ -481,7 +481,7 @@
 
     std::string tempDir;
     if (const char* dir = std::getenv("TMPDIR")) tempDir = dir;
-#ifdef _MSC_VER
+#ifdef _WIN32
     if (tempDir.empty()) {
         char tempDirBuffer[MAX_PATH+1];
         int tempDirLen = GetTempPath(MAX_PATH+1, tempDirBuffer);
diff -Naur openvdb-7.0.0-orig/openvdb_houdini/openvdb_houdini/ParmFactory.h openvdb-7.0.0/openvdb_houdini/openvdb_houdini/ParmFactory.h
--- openvdb-7.0.0-orig/openvdb_houdini/openvdb_houdini/ParmFactory.h	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb_houdini/openvdb_houdini/ParmFactory.h	2020-06-19 12:17:43.168133700 +0300
@@ -231,7 +231,7 @@
 
 #if defined(GCC3)
     #define IS_DEPRECATED __attribute__ ((deprecated))
-#elif defined(_MSC_VER)
+#elif defined(_WIN32)
     #define IS_DEPRECATED __declspec(deprecated)
 #else
     #define IS_DEPRECATED
diff -Naur openvdb-7.0.0-orig/openvdb_houdini/openvdb_houdini/PointUtils.cc openvdb-7.0.0/openvdb_houdini/openvdb_houdini/PointUtils.cc
--- openvdb-7.0.0-orig/openvdb_houdini/openvdb_houdini/PointUtils.cc	2019-12-06 23:11:33.000000000 +0300
+++ openvdb-7.0.0/openvdb_houdini/openvdb_houdini/PointUtils.cc	2020-06-19 12:18:27.903734800 +0300
@@ -1804,7 +1804,7 @@
 } // unnamed namespace
 
 
-#ifdef _MSC_VER
+#ifdef _WIN32
 
 OPENVDB_HOUDINI_API const PRM_ChoiceList
 VDBPointsGroupMenuInput1(PRM_CHOICELIST_TOGGLE, sopBuildVDBPointsGroupMenu);
