diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index 760221b124439a5ed7835d2ce2073deb0ab2a583..c07f0f30f8fb84ec09e866c80c67661f985541a7 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -12,3 +12,7 @@
 list(APPEND CTEST_CUSTOM_MEMCHECK_IGNORE
   kwsys.testProcess-10
   )
+
+list(APPEND CTEST_CUSTOM_WARNING_EXCEPTION
+  "LICENSE WARNING"
+  )
diff --git a/FStream.hxx.in b/FStream.hxx.in
index d79bbdf16b90d67f71c2b102e7ae02662d78366a..b424488920221296166adba3b5adf99a3fe7d458 100644
--- a/FStream.hxx.in
+++ b/FStream.hxx.in
@@ -87,7 +87,7 @@ public:
 
   bool _open(char const* file_name, std::ios_base::openmode mode)
   {
-    if (is_open() || file_) {
+    if (_is_open() || file_) {
       return false;
     }
 #  if defined(_MSC_VER)
@@ -108,7 +108,7 @@ public:
     return success;
   }
 
-  bool is_open()
+  bool _is_open()
   {
     if (!buf_) {
       return false;
@@ -116,7 +116,7 @@ public:
     return buf_->is_open();
   }
 
-  bool is_open() const
+  bool _is_open() const
   {
     if (!buf_) {
       return false;
@@ -198,9 +198,11 @@ public:
     this->_set_state(this->_open(file_name, mode), this, this);
   }
 
+  bool is_open() { return this->_is_open(); }
+
   void close() { this->_set_state(this->_close(), this, this); }
 
-  using basic_efilebuf<CharType, Traits>::is_open;
+  using basic_efilebuf<CharType, Traits>::_is_open;
 
   internal_buffer_type* rdbuf() const { return this->buf_; }
 
@@ -212,7 +214,7 @@ class basic_ofstream
   : public std::basic_ostream<CharType, Traits>
   , public basic_efilebuf<CharType, Traits>
 {
-  using basic_efilebuf<CharType, Traits>::is_open;
+  using basic_efilebuf<CharType, Traits>::_is_open;
 
 public:
   typedef typename basic_efilebuf<CharType, Traits>::internal_buffer_type
@@ -242,6 +244,8 @@ public:
 
   void close() { this->_set_state(this->_close(), this, this); }
 
+  bool is_open() { return this->_is_open(); }
+
   internal_buffer_type* rdbuf() const { return this->buf_; }
 
   ~basic_ofstream() @KWSYS_NAMESPACE@_FStream_NOEXCEPT { close(); }
diff --git a/RegularExpression.hxx.in b/RegularExpression.hxx.in
index 0c2366b84218b0875b34e7c07eb03bb91e874aa3..d11db88280b895b5aed2cf1b7439bcfdd42ddca5 100644
--- a/RegularExpression.hxx.in
+++ b/RegularExpression.hxx.in
@@ -66,6 +66,13 @@ private:
   const char* searchstring;
 };
 
+#ifdef _MSC_VER
+#  pragma warning(push)
+#  if _MSC_VER < 1900
+#    pragma warning(disable : 4351) /* new behavior */
+#  endif
+#endif
+
 /**
  * \brief Creates an invalid match object
  */
@@ -76,6 +83,10 @@ inline RegularExpressionMatch::RegularExpressionMatch()
 {
 }
 
+#ifdef _MSC_VER
+#  pragma warning(pop)
+#endif
+
 /**
  * \brief Returns true if the match pointers are valid
  */
diff --git a/SystemTools.cxx b/SystemTools.cxx
index ce4d6ef9505daf6e1f34d4c09a1319135e011317..dcf05daa85e3f09dd7e7c367cef451dff157c9aa 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -2326,14 +2326,8 @@ bool SystemTools::TextFilesDiffer(const std::string& path1,
 static bool CopyFileContentBlockwise(const std::string& source,
                                      const std::string& destination)
 {
-// Open files
-#if defined(_WIN32)
-  kwsys::ifstream fin(
-    Encoding::ToNarrow(Encoding::ToWindowsExtendedPath(source)).c_str(),
-    std::ios::in | std::ios::binary);
-#else
+  // Open files
   kwsys::ifstream fin(source.c_str(), std::ios::in | std::ios::binary);
-#endif
   if (!fin) {
     return false;
   }
@@ -2344,14 +2338,8 @@ static bool CopyFileContentBlockwise(const std::string& source,
   // that do not allow file removal can be modified.
   SystemTools::RemoveFile(destination);
 
-#if defined(_WIN32)
-  kwsys::ofstream fout(
-    Encoding::ToNarrow(Encoding::ToWindowsExtendedPath(destination)).c_str(),
-    std::ios::out | std::ios::trunc | std::ios::binary);
-#else
   kwsys::ofstream fout(destination.c_str(),
                        std::ios::out | std::ios::trunc | std::ios::binary);
-#endif
   if (!fout) {
     return false;
   }
diff --git a/Terminal.c b/Terminal.c
index 4dd246148c507a6fe9dd6beaa0a3a3835e5c9b3f..c9515ee7d0e5d30f699665c0087169570f634222 100644
--- a/Terminal.c
+++ b/Terminal.c
@@ -172,6 +172,14 @@ static int kwsysTerminalStreamIsVT100(FILE* stream, int default_vt100,
     }
   }
 
+  /* GNU make 4.1+ may tell us that its output is destined for a TTY. */
+  {
+    const char* termout = getenv("MAKE_TERMOUT");
+    if (termout && *termout != '\0') {
+      return 1;
+    }
+  }
+
   /* If running inside emacs the terminal is not VT100.  Some emacs
      seem to claim the TERM is xterm even though they do not support
      VT100 escapes.  */