diff --git a/Common/Core/vtkABI.h b/Common/Core/vtkABI.h
index 107727128a..da1c1f3e51 100644
--- a/Common/Core/vtkABI.h
+++ b/Common/Core/vtkABI.h
@@ -44,7 +44,7 @@
 #ifndef vtkABI_h
 #define vtkABI_h
 
-#if defined(_WIN32)
+#if defined(_WIN32) || defined(__CYGWIN__)
 #define VTK_ABI_IMPORT __declspec(dllimport)
 #define VTK_ABI_EXPORT __declspec(dllexport)
 #define VTK_ABI_HIDDEN
diff --git a/IO/EnSight/vtkEnSight6BinaryReader.cxx b/IO/EnSight/vtkEnSight6BinaryReader.cxx
index 080de74190..85b217b361 100644
--- a/IO/EnSight/vtkEnSight6BinaryReader.cxx
+++ b/IO/EnSight/vtkEnSight6BinaryReader.cxx
@@ -38,8 +38,8 @@
 #if defined(_WIN32)
 #define VTK_STAT_STRUCT struct _stat64
 #define VTK_STAT_FUNC _stat64
-#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ ||         \
-  defined __OpenBSD__
+#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ || \
+      defined __OpenBSD__ || defined __CYGWIN__
 // The BSDs use stat().
 #define VTK_STAT_STRUCT struct stat
 #define VTK_STAT_FUNC stat
diff --git a/IO/EnSight/vtkEnSightGoldBinaryReader.cxx b/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
index 8a0ba1f596..c0405326bc 100644
--- a/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
+++ b/IO/EnSight/vtkEnSightGoldBinaryReader.cxx
@@ -43,8 +43,8 @@
 #if defined(_WIN32)
 #define VTK_STAT_STRUCT struct _stat64
 #define VTK_STAT_FUNC _stat64
-#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ ||         \
-  defined __OpenBSD__
+#elif defined _DARWIN_FEATURE_64_BIT_INODE || defined __FreeBSD__ || defined __NetBSD__ || \
+      defined __OpenBSD__ || defined __CYGWIN__
 // The BSDs use stat().
 #define VTK_STAT_STRUCT struct stat
 #define VTK_STAT_FUNC stat
diff --git a/IO/LSDyna/LSDynaFamily.cxx b/IO/LSDyna/LSDynaFamily.cxx
index 43a141f3d1..0b4c78c076 100644
--- a/IO/LSDyna/LSDynaFamily.cxx
+++ b/IO/LSDyna/LSDynaFamily.cxx
@@ -35,8 +35,9 @@ namespace
 // Decide which of 3 stat varieties to use: stat, stat64, __stat64
 // Usually stat uses 32 bit fields, and stat64 (with underscores in Windows) uses 64 bit fields.
 // But on the BSDs, stat uses 64 bit fields these days.
-#if (VTK_SIZEOF_ID_TYPE == 8) && !defined(_DARWIN_FEATURE_64_BIT_INODE) &&                         \
-  !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__)
+#if (VTK_SIZEOF_ID_TYPE == 8) && !defined(_DARWIN_FEATURE_64_BIT_INODE) && \
+  !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && \
+  !defined(__CYGWIN__)
 #ifndef _WIN32
 #define USE_STAT_64
 #else
diff --git a/ThirdParty/loguru/vtkloguru/loguru.cpp b/ThirdParty/loguru/vtkloguru/loguru.cpp
index 468675d512..1d39cbcff5 100644
--- a/ThirdParty/loguru/vtkloguru/loguru.cpp
+++ b/ThirdParty/loguru/vtkloguru/loguru.cpp
@@ -72,13 +72,13 @@
 
 // TODO: use defined(_POSIX_VERSION) for some of these things?
 
-#if defined(_WIN32) || defined(__CYGWIN__)
+#if defined(_WIN32)
 	#define LOGURU_PTHREADS    0
 	#define LOGURU_WINTHREADS  1
 	#ifndef LOGURU_STACKTRACES
 		#define LOGURU_STACKTRACES 0
 	#endif
-#elif defined(__rtems__) || defined(__ANDROID__)
+#elif defined(__rtems__) || defined(__ANDROID__) || defined(__CYGWIN__)
 	#define LOGURU_PTHREADS    1
 	#define LOGURU_WINTHREADS  0
 	#ifndef LOGURU_STACKTRACES
@@ -576,7 +576,7 @@ namespace loguru
 			#elif LOGURU_PTHREADS
 				char old_thread_name[16] = {0};
 				auto this_thread = pthread_self();
-				#if defined(__APPLE__) || defined(__linux__)
+				#if defined(__APPLE__) || defined(__linux__) || defined(__CYGWIN__)
 					pthread_getname_np(this_thread, old_thread_name, sizeof(old_thread_name));
 				#endif
 				if (old_thread_name[0] == 0) {
@@ -584,7 +584,7 @@ namespace loguru
 						pthread_setname_np(main_thread_name);
 					#elif defined(__FreeBSD__) || defined(__OpenBSD__)
 						pthread_set_name_np(this_thread, main_thread_name);
-					#elif defined(__linux__)
+					#elif defined(__linux__) || defined(__CYGWIN__)
 						pthread_setname_np(this_thread, main_thread_name);
 					#endif
 				}
@@ -927,7 +927,7 @@ namespace loguru
 				pthread_setname_np(name);
 			#elif defined(__FreeBSD__) || defined(__OpenBSD__)
 				pthread_set_name_np(pthread_self(), name);
-			#elif defined(__linux__)
+			#elif defined(__linux__) || defined(__CYGWIN__)
 				pthread_setname_np(pthread_self(), name);
 			#endif
 		#elif LOGURU_WINTHREADS
@@ -960,7 +960,7 @@ namespace loguru
 			} else {
 				buffer[0] = 0;
 			}
-		#elif defined(__APPLE__) || defined(__linux__)
+		#elif defined(__APPLE__) || defined(__linux__) || defined(__CYGWIN__)
 			pthread_getname_np(thread, buffer, length);
 		#else
 			buffer[0] = 0;
@@ -975,6 +975,8 @@ namespace loguru
 				(void)thr_self(&thread_id);
 			#elif defined(__OpenBSD__)
 				unsigned thread_id = -1;
+            #elif defined(__CYGWIN__)
+                uint64_t thread_id = (uint64_t)pthread_self();
 			#else
 				uint64_t thread_id = thread;
 			#endif
diff --git a/ThirdParty/netcdf/vtknetcdf/include/vtk_netcdf_mangle.h b/ThirdParty/netcdf/vtknetcdf/include/vtk_netcdf_mangle.h
index 02feb08226..a1a49c1a95 100644
--- a/ThirdParty/netcdf/vtknetcdf/include/vtk_netcdf_mangle.h
+++ b/ThirdParty/netcdf/vtknetcdf/include/vtk_netcdf_mangle.h
@@ -1246,7 +1246,7 @@
 #define write_numrecs vtknetcdf_write_numrecs
 
 /* Only define strlcat conditionally, as it's provided by system headers on the BSDs. */
-#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(_BSD_SOURCE)
+#if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) && !defined(__OpenBSD__) && !defined(_BSD_SOURCE) && !defined(__CYGWIN__)
 #define strlcat vtknetcdf_strlcat
 #endif
 
diff --git a/Utilities/KWSys/vtksys/Status.hxx.in b/Utilities/KWSys/vtksys/Status.hxx.in
index 16efaefdf3..e815f133f7 100644
--- a/Utilities/KWSys/vtksys/Status.hxx.in
+++ b/Utilities/KWSys/vtksys/Status.hxx.in
@@ -9,6 +9,11 @@
 
 namespace @KWSYS_NAMESPACE@ {
 
+/** From <X11/Xlib.h>
+ */
+#undef Status
+#undef Success
+
 /** \class Status
  * \brief OS-specific status of a system operation.
  */
