From 528366d5455cf93307caa0ca7d628b6ca6fdf5a0 Mon Sep 17 00:00:00 2001
From: David Gobbi <david.gobbi@gmail.com>
Date: Sun, 4 Aug 2024 11:35:23 -0600
Subject: [PATCH] Move EXPORT from vtkSMPToolsImpl template to specializations

The method definitions in vtkSMPToolsImpl.h caused a build error
"definition of dllimport function not allowed" with MSVC.  The
error goes away if the export macro is applied to the backend
specializations instead of the vtkSMPToolsImpl template itself.
---
 Common/Core/SMP/Common/vtkSMPToolsImpl.h       |  2 +-
 Common/Core/SMP/OpenMP/vtkSMPToolsImpl.txx     |  8 ++++----
 Common/Core/SMP/STDThread/vtkSMPToolsImpl.txx  | 11 ++++++-----
 Common/Core/SMP/Sequential/vtkSMPToolsImpl.txx |  6 +++---
 Common/Core/SMP/TBB/vtkSMPToolsImpl.txx        |  8 ++++----
 5 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/Common/Core/SMP/Common/vtkSMPToolsImpl.h b/Common/Core/SMP/Common/vtkSMPToolsImpl.h
index e53ba41f175..feb6f883634 100644
--- a/Common/Core/SMP/Common/vtkSMPToolsImpl.h
+++ b/Common/Core/SMP/Common/vtkSMPToolsImpl.h
@@ -43,7 +43,7 @@ const BackendType DefaultBackend = BackendType::OpenMP;
 #endif
 
 template <BackendType Backend>
-class VTKCOMMONCORE_EXPORT vtkSMPToolsImpl
+class vtkSMPToolsImpl
 {
 public:
   //--------------------------------------------------------------------------------
diff --git a/Common/Core/SMP/OpenMP/vtkSMPToolsImpl.txx b/Common/Core/SMP/OpenMP/vtkSMPToolsImpl.txx
index 25c041bedd7..dff4dfc2f22 100644
--- a/Common/Core/SMP/OpenMP/vtkSMPToolsImpl.txx
+++ b/Common/Core/SMP/OpenMP/vtkSMPToolsImpl.txx
@@ -145,19 +145,19 @@ void vtkSMPToolsImpl<BackendType::OpenMP>::Sort(
 
 //--------------------------------------------------------------------------------
 template <>
-void vtkSMPToolsImpl<BackendType::OpenMP>::Initialize(int);
+VTKCOMMONCORE_EXPORT void vtkSMPToolsImpl<BackendType::OpenMP>::Initialize(int);
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::OpenMP>::GetEstimatedNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::OpenMP>::GetEstimatedNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::OpenMP>::GetEstimatedDefaultNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::OpenMP>::GetEstimatedDefaultNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-bool vtkSMPToolsImpl<BackendType::OpenMP>::GetSingleThread();
+VTKCOMMONCORE_EXPORT bool vtkSMPToolsImpl<BackendType::OpenMP>::GetSingleThread();
 
 VTK_ABI_NAMESPACE_END
 } // namespace smp
diff --git a/Common/Core/SMP/STDThread/vtkSMPToolsImpl.txx b/Common/Core/SMP/STDThread/vtkSMPToolsImpl.txx
index 290d072722c..5c7bb0a5ab1 100644
--- a/Common/Core/SMP/STDThread/vtkSMPToolsImpl.txx
+++ b/Common/Core/SMP/STDThread/vtkSMPToolsImpl.txx
@@ -117,23 +117,24 @@ void vtkSMPToolsImpl<BackendType::STDThread>::Sort(
 
 //--------------------------------------------------------------------------------
 template <>
-void vtkSMPToolsImpl<BackendType::STDThread>::Initialize(int);
+VTKCOMMONCORE_EXPORT void vtkSMPToolsImpl<BackendType::STDThread>::Initialize(int);
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::STDThread>::GetEstimatedNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::STDThread>::GetEstimatedNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::STDThread>::GetEstimatedDefaultNumberOfThreads();
+VTKCOMMONCORE_EXPORT int
+vtkSMPToolsImpl<BackendType::STDThread>::GetEstimatedDefaultNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-bool vtkSMPToolsImpl<BackendType::STDThread>::GetSingleThread();
+VTKCOMMONCORE_EXPORT bool vtkSMPToolsImpl<BackendType::STDThread>::GetSingleThread();
 
 //--------------------------------------------------------------------------------
 template <>
-bool vtkSMPToolsImpl<BackendType::STDThread>::IsParallelScope();
+VTKCOMMONCORE_EXPORT bool vtkSMPToolsImpl<BackendType::STDThread>::IsParallelScope();
 
 VTK_ABI_NAMESPACE_END
 } // namespace smp
diff --git a/Common/Core/SMP/Sequential/vtkSMPToolsImpl.txx b/Common/Core/SMP/Sequential/vtkSMPToolsImpl.txx
index d77309694c3..5913dd263ec 100644
--- a/Common/Core/SMP/Sequential/vtkSMPToolsImpl.txx
+++ b/Common/Core/SMP/Sequential/vtkSMPToolsImpl.txx
@@ -95,15 +95,15 @@ void vtkSMPToolsImpl<BackendType::Sequential>::Sort(
 
 //--------------------------------------------------------------------------------
 template <>
-void vtkSMPToolsImpl<BackendType::Sequential>::Initialize(int);
+VTKCOMMONCORE_EXPORT void vtkSMPToolsImpl<BackendType::Sequential>::Initialize(int);
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::Sequential>::GetEstimatedNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::Sequential>::GetEstimatedNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-bool vtkSMPToolsImpl<BackendType::Sequential>::GetSingleThread();
+VTKCOMMONCORE_EXPORT bool vtkSMPToolsImpl<BackendType::Sequential>::GetSingleThread();
 
 VTK_ABI_NAMESPACE_END
 } // namespace smp
diff --git a/Common/Core/SMP/TBB/vtkSMPToolsImpl.txx b/Common/Core/SMP/TBB/vtkSMPToolsImpl.txx
index 5b3ab312555..919313ecf0a 100644
--- a/Common/Core/SMP/TBB/vtkSMPToolsImpl.txx
+++ b/Common/Core/SMP/TBB/vtkSMPToolsImpl.txx
@@ -196,19 +196,19 @@ void vtkSMPToolsImpl<BackendType::TBB>::Sort(
 
 //--------------------------------------------------------------------------------
 template <>
-void vtkSMPToolsImpl<BackendType::TBB>::Initialize(int);
+VTKCOMMONCORE_EXPORT void vtkSMPToolsImpl<BackendType::TBB>::Initialize(int);
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::TBB>::GetEstimatedDefaultNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::TBB>::GetEstimatedDefaultNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-int vtkSMPToolsImpl<BackendType::TBB>::GetEstimatedNumberOfThreads();
+VTKCOMMONCORE_EXPORT int vtkSMPToolsImpl<BackendType::TBB>::GetEstimatedNumberOfThreads();
 
 //--------------------------------------------------------------------------------
 template <>
-bool vtkSMPToolsImpl<BackendType::TBB>::GetSingleThread();
+VTKCOMMONCORE_EXPORT bool vtkSMPToolsImpl<BackendType::TBB>::GetSingleThread();
 
 VTK_ABI_NAMESPACE_END
 } // namespace smp
-- 
GitLab