diff --git a/CMake/vtkModuleTesting.cmake b/CMake/vtkModuleTesting.cmake
index 75442972cc26aef2891c0b62b8c0f18e6c35b3b1..72647553db4508b609045e249f575c535a1833a0 100644
--- a/CMake/vtkModuleTesting.cmake
+++ b/CMake/vtkModuleTesting.cmake
@@ -744,3 +744,32 @@ function (vtk_add_test_python_mpi)
   endif ()
   vtk_add_test_python(${ARGN})
 endfunction ()
+
+function (vtk_add_test_mangling module)
+  if (NOT UNIX)
+    return ()
+  endif ()
+
+  cmake_parse_arguments("vtk_mangling_test" "" "" "EXEMPTIONS" ${ARGN})
+
+  if (VTK_ABI_NAMESPACE_NAME)
+    _vtk_module_real_target(_vtk_test_target "${module}")
+    get_property(has_sources TARGET ${_vtk_test_target} PROPERTY SOURCES)
+    get_property(has_test GLOBAL PROPERTY "${module}_HAS_MANGLING_TEST" SET)
+
+    if (NOT has_test AND has_sources)
+      set_property(GLOBAL PROPERTY "${module}_HAS_MANGLING_TEST" 1)
+      add_test(
+        NAME    "${module}-ManglingTest"
+        COMMAND "${Python${VTK_PYTHON_VERSION}_EXECUTABLE}"
+                # TODO: What to do when using this from a VTK install?
+                "${VTK_SOURCE_DIR}/Testing/Core/CheckSymbolMangling.py"
+                "--files"
+                "$<TARGET_OBJECTS:${_vtk_test_target}>"
+                "--prefix"
+                "${VTK_ABI_NAMESPACE_NAME}"
+                "--exemptions"
+                "${vtk_mangling_test_EXEMPTIONS}")
+    endif ()
+  endif ()
+endfunction ()
diff --git a/Charts/Core/CMakeLists.txt b/Charts/Core/CMakeLists.txt
index e81942a72dd025ed3af670f9477ad3683f7328e7..fb5dc390aaa13e788132ba87130566cd181b95cc 100644
--- a/Charts/Core/CMakeLists.txt
+++ b/Charts/Core/CMakeLists.txt
@@ -50,3 +50,4 @@ set(classes
 
 vtk_module_add_module(VTK::ChartsCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ChartsCore)
diff --git a/Common/Archive/CMakeLists.txt b/Common/Archive/CMakeLists.txt
index e804d0ca108b0f3313ae26c7b620aafed950a396..9ea06b18101af0fa36b058bf44bad2b54aed2c17 100644
--- a/Common/Archive/CMakeLists.txt
+++ b/Common/Archive/CMakeLists.txt
@@ -8,3 +8,4 @@ vtk_module_add_module(VTK::CommonArchive
   CLASSES ${classes})
 
 vtk_module_link(VTK::CommonArchive PRIVATE LibArchive::LibArchive)
+vtk_add_test_mangling(VTK::CommonArchive)
diff --git a/Common/Color/CMakeLists.txt b/Common/Color/CMakeLists.txt
index d3e1f7e888ae1c9210070d07a8138b54b633671f..e50270e7e6ee3f392b26502ffca5732b32dc9488 100644
--- a/Common/Color/CMakeLists.txt
+++ b/Common/Color/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 
 vtk_module_add_module(VTK::CommonColor
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonColor)
diff --git a/Common/ComputationalGeometry/CMakeLists.txt b/Common/ComputationalGeometry/CMakeLists.txt
index bfde1fbfb9d974e79d460c22667c582fbcaef69d..e91daf8ce2d1480a785f0de3946ca7021779151b 100644
--- a/Common/ComputationalGeometry/CMakeLists.txt
+++ b/Common/ComputationalGeometry/CMakeLists.txt
@@ -28,3 +28,4 @@ set(classes
 
 vtk_module_add_module(VTK::CommonComputationalGeometry
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonComputationalGeometry)
diff --git a/Common/Core/CMakeLists.txt b/Common/Core/CMakeLists.txt
index 24aa33130f1707f6ed323a3f4ad5cbc3d64a786d..f23609876969cfa14a5f1e483a1179787c67f639 100644
--- a/Common/Core/CMakeLists.txt
+++ b/Common/Core/CMakeLists.txt
@@ -557,6 +557,8 @@ vtk_module_add_module(VTK::CommonCore
   NOWRAP_HEADERS    ${nowrap_headers}
   PRIVATE_HEADERS   ${private_headers}
   PRIVATE_TEMPLATES ${private_templates})
+vtk_add_test_mangling(VTK::CommonCore
+  EXEMPTIONS GetVTKVersion)
 if (vtk_include_dirs)
   vtk_module_include(VTK::CommonCore
     PRIVATE
diff --git a/Common/DataModel/CMakeLists.txt b/Common/DataModel/CMakeLists.txt
index 78d2fcaf17cbbd1c3db0aecc724424aca147a8aa..0f39b280add085b3da50b5fbd6d7620647d6489e 100644
--- a/Common/DataModel/CMakeLists.txt
+++ b/Common/DataModel/CMakeLists.txt
@@ -301,3 +301,4 @@ vtk_module_add_module(VTK::CommonDataModel
   HEADERS           ${headers}
   NOWRAP_HEADERS    ${nowrap_headers}
   PRIVATE_TEMPLATES ${private_templates})
+vtk_add_test_mangling(VTK::CommonDataModel)
diff --git a/Common/DataModel/vtkPointsProjectedHull.cxx b/Common/DataModel/vtkPointsProjectedHull.cxx
index f191f2a4a4606b4ed4d4a751c376dc2f02400ec8..0deb368cf8a324ecbbdf8952c6934a9b149d2c40 100644
--- a/Common/DataModel/vtkPointsProjectedHull.cxx
+++ b/Common/DataModel/vtkPointsProjectedHull.cxx
@@ -205,10 +205,10 @@ VTK_ABI_NAMESPACE_END
 //
 // Algorithm comes from Graphics Gems IV
 //
-extern "C"
+namespace
 {
-  int vtkPointsProjectedHullIncrVertAxis(const void* p1, const void* p2);
-  int vtkPointsProjectedHullCCW(const void* p1, const void* p2);
+int vtkPointsProjectedHullIncrVertAxis(const void* p1, const void* p2);
+int vtkPointsProjectedHullCCW(const void* p1, const void* p2);
 }
 
 VTK_ABI_NAMESPACE_BEGIN
@@ -731,49 +731,49 @@ VTK_ABI_NAMESPACE_END
 
 // The sort functions
 
-extern "C"
+namespace
 {
-  int vtkPointsProjectedHullIncrVertAxis(const void* p1, const void* p2)
-  {
-    const double* a = static_cast<const double*>(p1);
-    const double* b = static_cast<const double*>(p2);
+int vtkPointsProjectedHullIncrVertAxis(const void* p1, const void* p2)
+{
+  const double* a = static_cast<const double*>(p1);
+  const double* b = static_cast<const double*>(p2);
 
-    if (a[1] < b[1])
-    {
-      return -1;
-    }
-    else if (a[1] == b[1])
-    {
-      return 0;
-    }
-    else
-    {
-      return 1;
-    }
+  if (a[1] < b[1])
+  {
+    return -1;
   }
-
-  int vtkPointsProjectedHullCCW(const void* p1, const void* p2)
+  else if (a[1] == b[1])
   {
-    const double* a = static_cast<const double*>(p1);
-    const double* b = static_cast<const double*>(p2);
+    return 0;
+  }
+  else
+  {
+    return 1;
+  }
+}
 
-    // sort in counter clockwise order from first point
+int vtkPointsProjectedHullCCW(const void* p1, const void* p2)
+{
+  const double* a = static_cast<const double*>(p1);
+  const double* b = static_cast<const double*>(p2);
 
-    double val = VTK_ISLEFT(firstPt, a, b);
+  // sort in counter clockwise order from first point
 
-    if (val < 0)
-    {
-      return 1; // b is right of line firstPt->a
-    }
-    else if (val == 0)
-    {
-      return 0; // b is on line firstPt->a
-    }
-    else
-    {
-      return -1; // b is left of line firstPt->a
-    }
+  double val = VTK_ISLEFT(firstPt, a, b);
+
+  if (val < 0)
+  {
+    return 1; // b is right of line firstPt->a
+  }
+  else if (val == 0)
+  {
+    return 0; // b is on line firstPt->a
   }
+  else
+  {
+    return -1; // b is left of line firstPt->a
+  }
+}
 }
 
 VTK_ABI_NAMESPACE_BEGIN
diff --git a/Common/ExecutionModel/CMakeLists.txt b/Common/ExecutionModel/CMakeLists.txt
index 9d9caf818670589906e2c646fe87ec907c175b26..0f2b807056b369a7e690bc42d60e0fa2c68a1c3f 100644
--- a/Common/ExecutionModel/CMakeLists.txt
+++ b/Common/ExecutionModel/CMakeLists.txt
@@ -72,3 +72,4 @@ set(classes
 
 vtk_module_add_module(VTK::CommonExecutionModel
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonExecutionModel)
diff --git a/Common/Math/CMakeLists.txt b/Common/Math/CMakeLists.txt
index c1e06ec4dff9b1766f7ad3ec812794ef0c0122d5..0c7a917a81f1a74402f74a65804455377ccf0706 100644
--- a/Common/Math/CMakeLists.txt
+++ b/Common/Math/CMakeLists.txt
@@ -40,3 +40,4 @@ vtk_module_add_module(VTK::CommonMath
   HEADERS           ${headers}
   NOWRAP_CLASSES    ${nowrap_classes}
 )
+vtk_add_test_mangling(VTK::CommonMath)
diff --git a/Common/Misc/CMakeLists.txt b/Common/Misc/CMakeLists.txt
index 49fc06859fd177d36cd3a57b416e709964a27e02..33b0ef1f217d95931d4491c7796fb5ebbd855721 100644
--- a/Common/Misc/CMakeLists.txt
+++ b/Common/Misc/CMakeLists.txt
@@ -16,3 +16,4 @@ endif ()
 
 vtk_module_add_module(VTK::CommonMisc
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonMisc)
diff --git a/Common/Python/CMakeLists.txt b/Common/Python/CMakeLists.txt
index a481164bb44da17b8e29cea21974793adff53418..9836604b279da75e7bda769ee460e78d518098b2 100644
--- a/Common/Python/CMakeLists.txt
+++ b/Common/Python/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::CommonPython
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonPython)
diff --git a/Common/System/CMakeLists.txt b/Common/System/CMakeLists.txt
index a1ed5944e18b059f15a995fbb0c277b848d242f2..4e009819e877a1d8e0d02d3799dd9030e6934e46 100644
--- a/Common/System/CMakeLists.txt
+++ b/Common/System/CMakeLists.txt
@@ -33,3 +33,4 @@ vtk_module_link(VTK::CommonSystem
   PRIVATE
     $<$<PLATFORM_ID:WIN32>:wsock32>
     Threads::Threads)
+vtk_add_test_mangling(VTK::CommonSystem)
diff --git a/Common/Transforms/CMakeLists.txt b/Common/Transforms/CMakeLists.txt
index a1f09e455259ef3636c630223d9eb2f60e4fd89a..a1f1f9aec101564bccb2b7029e99a4539acac1b5 100644
--- a/Common/Transforms/CMakeLists.txt
+++ b/Common/Transforms/CMakeLists.txt
@@ -18,3 +18,4 @@ set(classes
 
 vtk_module_add_module(VTK::CommonTransforms
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::CommonTransforms)
diff --git a/Domains/Chemistry/CMakeLists.txt b/Domains/Chemistry/CMakeLists.txt
index c4b33bc822e4c94ecaa2ba2821421ec66440a1b6..42d1618eff1204bc795feab08d020719d259d3b8 100644
--- a/Domains/Chemistry/CMakeLists.txt
+++ b/Domains/Chemistry/CMakeLists.txt
@@ -19,3 +19,4 @@ vtk_module_add_module(VTK::DomainsChemistry
   CLASSES ${classes}
   NOWRAP_HEADERS ${headers}
   PRIVATE_HEADERS vtkBlueObeliskDataInternal.h)
+vtk_add_test_mangling(VTK::DomainsChemistry)
diff --git a/Domains/ChemistryOpenGL2/CMakeLists.txt b/Domains/ChemistryOpenGL2/CMakeLists.txt
index 3c7a32a7dbcb65769b5ebd294eb91c17a2354b9e..7ad7a21353f95a62bbbade7605babda4080404c9 100644
--- a/Domains/ChemistryOpenGL2/CMakeLists.txt
+++ b/Domains/ChemistryOpenGL2/CMakeLists.txt
@@ -22,3 +22,4 @@ vtk_module_add_module(VTK::DomainsChemistryOpenGL2
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::DomainsChemistryOpenGL2)
diff --git a/Domains/Microscopy/CMakeLists.txt b/Domains/Microscopy/CMakeLists.txt
index 1365e87572fce1cf6b3d282eff3aa8d1562973e5..5fee7a32d867dc23d86565105f66d967cee915f9 100644
--- a/Domains/Microscopy/CMakeLists.txt
+++ b/Domains/Microscopy/CMakeLists.txt
@@ -8,3 +8,4 @@ vtk_module_find_package(PACKAGE OpenSlide)
 vtk_module_link(VTK::DomainsMicroscopy
   PUBLIC
     OpenSlide::OpenSlide)
+vtk_add_test_mangling(VTK::DomainsMicroscopy)
diff --git a/Domains/ParallelChemistry/CMakeLists.txt b/Domains/ParallelChemistry/CMakeLists.txt
index a176d226dc1913b438cff0cb102f4765dbc4629f..0c720569984025a62670f18ceed2968ff492e72c 100644
--- a/Domains/ParallelChemistry/CMakeLists.txt
+++ b/Domains/ParallelChemistry/CMakeLists.txt
@@ -14,3 +14,4 @@ vtk_module_add_module(VTK::DomainsParallelChemistry
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::DomainsParallelChemistry)
diff --git a/Filters/AMR/CMakeLists.txt b/Filters/AMR/CMakeLists.txt
index 4572d2d74a6cd1fe89cbfe256a6d7695a3749e22..e1134fb17e3dbe9a98b7fce9bff4efbcde369d98 100644
--- a/Filters/AMR/CMakeLists.txt
+++ b/Filters/AMR/CMakeLists.txt
@@ -9,3 +9,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersAMR
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersAMR)
diff --git a/Filters/Core/CMakeLists.txt b/Filters/Core/CMakeLists.txt
index 96b580f3b650da56d06c1d9d8457b2d4a03c1650..7db4a3fca0ce0dd2e5a31d22df5b9147d6d4882f 100644
--- a/Filters/Core/CMakeLists.txt
+++ b/Filters/Core/CMakeLists.txt
@@ -126,3 +126,4 @@ set(headers
 
 vtk_module_add_module(VTK::FiltersCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersCore)
diff --git a/Filters/Extraction/CMakeLists.txt b/Filters/Extraction/CMakeLists.txt
index 48a6ec1104047dd5f699b174503398e64807ab41..a952bf53dda49d03bcc339430c7621244d1fc4d4 100644
--- a/Filters/Extraction/CMakeLists.txt
+++ b/Filters/Extraction/CMakeLists.txt
@@ -38,3 +38,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersExtraction
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersExtraction)
diff --git a/Filters/FlowPaths/CMakeLists.txt b/Filters/FlowPaths/CMakeLists.txt
index 7d3ee08eb24e23cc947c00cec8740921f5b300a8..469ece8e4c83184e52fb3aa75c38a12ee9efa485 100644
--- a/Filters/FlowPaths/CMakeLists.txt
+++ b/Filters/FlowPaths/CMakeLists.txt
@@ -29,3 +29,4 @@ set(nowrap_headers
 vtk_module_add_module(VTK::FiltersFlowPaths
   CLASSES ${classes}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::FiltersFlowPaths)
diff --git a/Filters/General/CMakeLists.txt b/Filters/General/CMakeLists.txt
index 97666da351ec7063b16391f3258604a940a91e5c..5820f685c0c6366979bb2e276cf4ecf312caa449 100644
--- a/Filters/General/CMakeLists.txt
+++ b/Filters/General/CMakeLists.txt
@@ -134,3 +134,4 @@ set(templates
 vtk_module_add_module(VTK::FiltersGeneral
   CLASSES ${classes}
   TEMPLATES ${templates})
+vtk_add_test_mangling(VTK::FiltersGeneral)
diff --git a/Filters/Generic/CMakeLists.txt b/Filters/Generic/CMakeLists.txt
index 907b24f603e8260914a69615809f167ff8226d87..2d97d651d9ab61cc474ef5849ec1fe512a0f09cf 100644
--- a/Filters/Generic/CMakeLists.txt
+++ b/Filters/Generic/CMakeLists.txt
@@ -11,3 +11,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersGeneric
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersGeneric)
diff --git a/Filters/Geometry/CMakeLists.txt b/Filters/Geometry/CMakeLists.txt
index 1332de16322e1181c05404f8e37b3f5e3c310ab7..1d653b19e573ee84ed7e70146f2d8e81f2cef550 100644
--- a/Filters/Geometry/CMakeLists.txt
+++ b/Filters/Geometry/CMakeLists.txt
@@ -25,3 +25,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersGeometry
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersGeometry)
diff --git a/Filters/Hybrid/CMakeLists.txt b/Filters/Hybrid/CMakeLists.txt
index fa07c05c5f4b8afa5dfabcd33019028415b5bdf9..725e2cbb821b8d32d164fc1b9a93f5ea73da60d1 100644
--- a/Filters/Hybrid/CMakeLists.txt
+++ b/Filters/Hybrid/CMakeLists.txt
@@ -28,3 +28,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersHybrid
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersHybrid)
diff --git a/Filters/HyperTree/CMakeLists.txt b/Filters/HyperTree/CMakeLists.txt
index 0193393467c5d8f7b33556e3df05a70d47e16942..d4998d5482437450ee90a6943d3b2c7bba280cc1 100644
--- a/Filters/HyperTree/CMakeLists.txt
+++ b/Filters/HyperTree/CMakeLists.txt
@@ -17,3 +17,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersHyperTree
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersHyperTree)
diff --git a/Filters/Imaging/CMakeLists.txt b/Filters/Imaging/CMakeLists.txt
index 6527ff0a9c054bc8c07cb6bf8ceb33f3a630c6d8..4970554cbdf301ed924564ca6dd79cf99ad8bf98 100644
--- a/Filters/Imaging/CMakeLists.txt
+++ b/Filters/Imaging/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersImaging
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersImaging)
diff --git a/Filters/Modeling/CMakeLists.txt b/Filters/Modeling/CMakeLists.txt
index ec23360e56888ccd059fd06393341861f12f3b32..dc021dce577badc3878b8549d648862179091831 100644
--- a/Filters/Modeling/CMakeLists.txt
+++ b/Filters/Modeling/CMakeLists.txt
@@ -37,3 +37,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersModeling
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersModeling)
diff --git a/Filters/OpenTURNS/CMakeLists.txt b/Filters/OpenTURNS/CMakeLists.txt
index 75ce7ab1e2b4afbfffbcbddff2dc019295f0be02..0dcde14e0b4af60cca8bf99a86f4592463307edd 100644
--- a/Filters/OpenTURNS/CMakeLists.txt
+++ b/Filters/OpenTURNS/CMakeLists.txt
@@ -29,3 +29,4 @@ vtk_module_link(VTK::FiltersOpenTURNS
 vtk_module_include(VTK::FiltersOpenTURNS
   PRIVATE
     ${OPENTURNS_INCLUDE_DIRS})
+vtk_add_test_mangling(VTK::FiltersOpenTURNS)
diff --git a/Filters/Parallel/CMakeLists.txt b/Filters/Parallel/CMakeLists.txt
index c9286be992b4f1a5ae263c4ec1fccdc53763a21b..3b959289ea13b01950bd7b6ef88e5a50c3d0238e 100644
--- a/Filters/Parallel/CMakeLists.txt
+++ b/Filters/Parallel/CMakeLists.txt
@@ -70,3 +70,4 @@ vtk_module_add_module(VTK::FiltersParallel
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header}
   )
+vtk_add_test_mangling(VTK::FiltersParallel)
diff --git a/Filters/ParallelDIY2/CMakeLists.txt b/Filters/ParallelDIY2/CMakeLists.txt
index 15143e9642d520d17168cd879cb49eb8831dfeb5..bb5587847d8864dd9198727a229509378e923d0e 100644
--- a/Filters/ParallelDIY2/CMakeLists.txt
+++ b/Filters/ParallelDIY2/CMakeLists.txt
@@ -35,3 +35,4 @@ vtk_module_add_module(VTK::FiltersParallelDIY2
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source} vtkDIYKdTreeUtilities.cxx
   PRIVATE_HEADERS ${vtk_object_factory_header} vtkDIYKdTreeUtilities.h)
+vtk_add_test_mangling(VTK::FiltersParallelDIY2)
diff --git a/Filters/ParallelFlowPaths/CMakeLists.txt b/Filters/ParallelFlowPaths/CMakeLists.txt
index 87d3a4b86492f9148c15c5cc8fe77411b3344c2c..72e234fa6b7996b6dd37fdb278d32e23d3f55b96 100644
--- a/Filters/ParallelFlowPaths/CMakeLists.txt
+++ b/Filters/ParallelFlowPaths/CMakeLists.txt
@@ -29,3 +29,4 @@ vtk_module_add_module(VTK::FiltersParallelFlowPaths
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::FiltersParallelFlowPaths)
diff --git a/Filters/ParallelGeometry/CMakeLists.txt b/Filters/ParallelGeometry/CMakeLists.txt
index 73b8396d464ed78aa856581a7501237e0b496e24..0b04620fbac847bbf6e8c9aa9943832234f8b8d7 100644
--- a/Filters/ParallelGeometry/CMakeLists.txt
+++ b/Filters/ParallelGeometry/CMakeLists.txt
@@ -19,3 +19,4 @@ vtk_module_add_module(VTK::FiltersParallelGeometry
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::FiltersParallelGeometry)
diff --git a/Filters/ParallelImaging/CMakeLists.txt b/Filters/ParallelImaging/CMakeLists.txt
index a66a84f1eb091c0b92834cf6cb9d50ed1e459ad2..7a1cdfd40c107375a514b486e8ca410dd640b548 100644
--- a/Filters/ParallelImaging/CMakeLists.txt
+++ b/Filters/ParallelImaging/CMakeLists.txt
@@ -8,3 +8,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersParallelImaging
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersParallelImaging)
diff --git a/Filters/ParallelMPI/CMakeLists.txt b/Filters/ParallelMPI/CMakeLists.txt
index d7bf83e6b32b8d344541c37be15e8690b6e741c3..c8df8764396487bcaf7d3e73c46a63bee0bc7418 100644
--- a/Filters/ParallelMPI/CMakeLists.txt
+++ b/Filters/ParallelMPI/CMakeLists.txt
@@ -7,3 +7,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersParallelMPI
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersParallelMPI)
diff --git a/Filters/ParallelStatistics/CMakeLists.txt b/Filters/ParallelStatistics/CMakeLists.txt
index 6ce54b549d081cb82c45169e21261448e6dc411e..c614caee4881e224ee25f42e272d174f251bd0a3 100644
--- a/Filters/ParallelStatistics/CMakeLists.txt
+++ b/Filters/ParallelStatistics/CMakeLists.txt
@@ -13,3 +13,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersParallelStatistics
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersParallelStatistics)
diff --git a/Filters/ParallelVerdict/CMakeLists.txt b/Filters/ParallelVerdict/CMakeLists.txt
index c66eee0abce98d97278eeffb29d17fc5acd9d14e..8c92488d6472fe9a2ef96b959126bd77de89235e 100644
--- a/Filters/ParallelVerdict/CMakeLists.txt
+++ b/Filters/ParallelVerdict/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersParallelVerdict
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersParallelVerdict)
diff --git a/Filters/Points/CMakeLists.txt b/Filters/Points/CMakeLists.txt
index 59e8cc44c49f6da9edc9dcf5d3b761e0c823779e..ab9926cca13b364bc9ee5a3d4320705f6c1c785b 100644
--- a/Filters/Points/CMakeLists.txt
+++ b/Filters/Points/CMakeLists.txt
@@ -44,3 +44,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersPoints
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersPoints)
diff --git a/Filters/Programmable/CMakeLists.txt b/Filters/Programmable/CMakeLists.txt
index 00532c028e95aa0036e3fd588a796f04dd0e284a..368c4cd622d2b901ddde6e4b7c0024fb4ebcb2c8 100644
--- a/Filters/Programmable/CMakeLists.txt
+++ b/Filters/Programmable/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersProgrammable
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersProgrammable)
diff --git a/Filters/Python/CMakeLists.txt b/Filters/Python/CMakeLists.txt
index 0fb00d0076ce22bf6c85303349e230a31d878efc..2bde8bd1556dd9422f1b485569a275a2d4a99e7b 100644
--- a/Filters/Python/CMakeLists.txt
+++ b/Filters/Python/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersPython
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersPython)
diff --git a/Filters/ReebGraph/CMakeLists.txt b/Filters/ReebGraph/CMakeLists.txt
index 2612c3a8c9e49411cb058238991de8de837026ff..af1d122f93112e2cf304ac60ebe5ca131d8bbb63 100644
--- a/Filters/ReebGraph/CMakeLists.txt
+++ b/Filters/ReebGraph/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_find_package(PRIVATE
 vtk_module_link(VTK::FiltersReebGraph
   PRIVATE
     "$<BUILD_INTERFACE:Boost::boost>")
+vtk_add_test_mangling(VTK::FiltersReebGraph)
diff --git a/Filters/SMP/CMakeLists.txt b/Filters/SMP/CMakeLists.txt
index 9bd92158b64c84fe35c3d139d67389f7cd1cf895..9755ac77bd909f79fce61beee12fa402719efb43 100644
--- a/Filters/SMP/CMakeLists.txt
+++ b/Filters/SMP/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersSMP
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersSMP)
diff --git a/Filters/Selection/CMakeLists.txt b/Filters/Selection/CMakeLists.txt
index 3da984ebf92924e4bd53aadd05c3bb89dd2afbea..f6c8711030feaeb3196813ec21d7fed6193d9806 100644
--- a/Filters/Selection/CMakeLists.txt
+++ b/Filters/Selection/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersSelection
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersSelection)
diff --git a/Filters/Sources/CMakeLists.txt b/Filters/Sources/CMakeLists.txt
index a35b5970598984998915458c2a8d34665cdc3f6e..f87fbfac8b60d515acc89cbf8ebfd8efab2115f1 100644
--- a/Filters/Sources/CMakeLists.txt
+++ b/Filters/Sources/CMakeLists.txt
@@ -45,3 +45,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersSources
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersSources)
diff --git a/Filters/Statistics/CMakeLists.txt b/Filters/Statistics/CMakeLists.txt
index 73ccd62630d4fa05bba23db358e3f50de09ada4d..085e1ec30e4ba6da5e34e941ecbbf37a3a75701b 100644
--- a/Filters/Statistics/CMakeLists.txt
+++ b/Filters/Statistics/CMakeLists.txt
@@ -26,3 +26,4 @@ set(nowrap_headers
 vtk_module_add_module(VTK::FiltersStatistics
   CLASSES ${classes}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::FiltersStatistics)
diff --git a/Filters/Texture/CMakeLists.txt b/Filters/Texture/CMakeLists.txt
index e789ba20a827735cf2933bb5d03bf50a3dbe4777..5c41dc6f8a2804ab5a2b6a9eff7264c63db4d238 100644
--- a/Filters/Texture/CMakeLists.txt
+++ b/Filters/Texture/CMakeLists.txt
@@ -10,3 +10,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersTexture
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersTexture)
diff --git a/Filters/Topology/CMakeLists.txt b/Filters/Topology/CMakeLists.txt
index 5c98f272c1402dc16f60a63ea765c671abd41d31..c136d9d8881f22678a318def553bd1bbce6c23a0 100644
--- a/Filters/Topology/CMakeLists.txt
+++ b/Filters/Topology/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersTopology
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersTopology)
diff --git a/Filters/Verdict/CMakeLists.txt b/Filters/Verdict/CMakeLists.txt
index e9903a06dbc7f1014e7ca05d2f17c3b510572214..02201174b8e7acdafb071d5ff9aae0fc5ced324e 100644
--- a/Filters/Verdict/CMakeLists.txt
+++ b/Filters/Verdict/CMakeLists.txt
@@ -6,3 +6,4 @@ set(classes
 
 vtk_module_add_module(VTK::FiltersVerdict
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::FiltersVerdict)
diff --git a/GUISupport/MFC/CMakeLists.txt b/GUISupport/MFC/CMakeLists.txt
index 66b52f1f6871638a1a923a8b9243d76a7d5ca7a8..b59b530988465c835c106a713da1b341e7ba8a8b 100644
--- a/GUISupport/MFC/CMakeLists.txt
+++ b/GUISupport/MFC/CMakeLists.txt
@@ -47,6 +47,7 @@ set(headers
 vtk_module_add_module(VTK::GUISupportMFC
   CLASSES ${classes}
   HEADERS ${headers})
+vtk_add_test_mangling(VTK::GUISupportMFC)
 
 if (vtk_mfc_static)
   vtk_module_link(VTK::GUISupportMFC
diff --git a/GUISupport/Qt/CMakeLists.txt b/GUISupport/Qt/CMakeLists.txt
index 586d501fd2ab48805c0ebf190dab5d998c9423c1..45cbe758cac58557cf8bf555b489441129462ab1 100644
--- a/GUISupport/Qt/CMakeLists.txt
+++ b/GUISupport/Qt/CMakeLists.txt
@@ -60,3 +60,4 @@ endforeach()
 
 vtk_module_definitions(VTK::GUISupportQt PRIVATE QT_NO_KEYWORDS)
 vtk_module_link(VTK::GUISupportQt PUBLIC ${qt_modules})
+vtk_add_test_mangling(VTK::GUISupportQt)
diff --git a/GUISupport/QtQuick/CMakeLists.txt b/GUISupport/QtQuick/CMakeLists.txt
index 8d049be6c2fa2894b3a4b69349191bccf0651604..9e9fb3ab8dec1a78371ceebe0baaa9c2f9745f84 100644
--- a/GUISupport/QtQuick/CMakeLists.txt
+++ b/GUISupport/QtQuick/CMakeLists.txt
@@ -35,3 +35,4 @@ vtk_module_definitions(VTK::GUISupportQtQuick PRIVATE QT_NO_KEYWORDS)
 vtk_module_link(VTK::GUISupportQtQuick PUBLIC ${qt_modules})
 
 add_subdirectory(qml)
+vtk_add_test_mangling(VTK::GUISupportQtQuick)
diff --git a/GUISupport/QtSQL/CMakeLists.txt b/GUISupport/QtSQL/CMakeLists.txt
index ad6d1807b307aec0b535bbfd702f512a387afafb..cdee2798e70f5b1a3997d434713f2116c3e999cb 100644
--- a/GUISupport/QtSQL/CMakeLists.txt
+++ b/GUISupport/QtSQL/CMakeLists.txt
@@ -16,3 +16,4 @@ vtk_module_find_package(
   VERSION_VAR         "Qt${vtk_qt_major_version}_VERSION")
 vtk_module_link(VTK::GUISupportQtSQL
   PUBLIC "Qt${vtk_qt_major_version}::Sql" "Qt${vtk_qt_major_version}::Widgets")
+vtk_add_test_mangling(VTK::GUISupportQtSQL)
diff --git a/Geovis/Core/CMakeLists.txt b/Geovis/Core/CMakeLists.txt
index b3be35427be481074f08d887211ee6e0d18a2392..20a20cc2011d7a871ba5647c9f9b8ac7840f87d1 100644
--- a/Geovis/Core/CMakeLists.txt
+++ b/Geovis/Core/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 
 vtk_module_add_module(VTK::GeovisCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::GeovisCore)
diff --git a/Geovis/GDAL/CMakeLists.txt b/Geovis/GDAL/CMakeLists.txt
index dfd58f07bc5011804cd292dbe5bca0dc27a2af25..fd4a308e0a6f2ceabfec01c1f487aafa84d14f4e 100644
--- a/Geovis/GDAL/CMakeLists.txt
+++ b/Geovis/GDAL/CMakeLists.txt
@@ -10,3 +10,4 @@ vtk_module_add_module(VTK::GeovisGDAL
 vtk_module_link(VTK::GeovisGDAL
   PRIVATE
     GDAL::GDAL)
+vtk_add_test_mangling(VTK::GeovisGDAL)
diff --git a/IO/ADIOS2/CMakeLists.txt b/IO/ADIOS2/CMakeLists.txt
index 779c4e691e555cf6331d411c6bdbed972fd92b58..93f278eabf45987221adbc52eb2692273b3ab26c 100644
--- a/IO/ADIOS2/CMakeLists.txt
+++ b/IO/ADIOS2/CMakeLists.txt
@@ -66,3 +66,4 @@ vtk_module_link(VTK::IOADIOS2 PRIVATE adios2::adios2)
 if (ADIOS2_HAVE_MPI)
   vtk_module_definitions(VTK::IOADIOS2 PRIVATE IOADIOS2_HAVE_MPI)
 endif ()
+vtk_add_test_mangling(VTK::IOADIOS2)
diff --git a/IO/AMR/CMakeLists.txt b/IO/AMR/CMakeLists.txt
index c2a052573db43487df726ac49e5a98f9aec561eb..2e48cd514675c02ada593b0ae1cdf679ded48572 100644
--- a/IO/AMR/CMakeLists.txt
+++ b/IO/AMR/CMakeLists.txt
@@ -20,3 +20,4 @@ vtk_module_add_module(VTK::IOAMR
   CLASSES ${classes}
   SOURCES ${sources}
   PRIVATE_CLASSES ${private_classes})
+vtk_add_test_mangling(VTK::IOAMR)
diff --git a/IO/Asynchronous/CMakeLists.txt b/IO/Asynchronous/CMakeLists.txt
index 86c92612962b280a4ffc891c88828eb13f17b181..f808c8380d613a9a936be63ae193f95095f6087d 100644
--- a/IO/Asynchronous/CMakeLists.txt
+++ b/IO/Asynchronous/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOAsynchronous
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOAsynchronous)
diff --git a/IO/CGNS/CMakeLists.txt b/IO/CGNS/CMakeLists.txt
index 21ff01306201f5db5b7222620b50b9da649f9d6b..0cfceee0c6ab03ba7c6bb5292a0241c18b8e968a 100644
--- a/IO/CGNS/CMakeLists.txt
+++ b/IO/CGNS/CMakeLists.txt
@@ -14,3 +14,4 @@ vtk_module_add_module(VTK::IOCGNSReader
   CLASSES ${classes}
   PRIVATE_CLASSES ${private_classes}
   PRIVATE_HEADERS ${private_headers})
+vtk_add_test_mangling(VTK::IOCGNSReader)
diff --git a/IO/CONVERGECFD/CMakeLists.txt b/IO/CONVERGECFD/CMakeLists.txt
index 5324e13a63e497a31f1cf9260a2995da7d53726c..3a5235da9619ae96d7647aa2b73643ac4c5c99b6 100644
--- a/IO/CONVERGECFD/CMakeLists.txt
+++ b/IO/CONVERGECFD/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 vtk_module_add_module(VTK::IOCONVERGECFD
   CLASSES ${classes}
   SOURCES ${sources})
+vtk_add_test_mangling(VTK::IOCONVERGECFD)
diff --git a/IO/CatalystConduit/CMakeLists.txt b/IO/CatalystConduit/CMakeLists.txt
index 87909d1cf02d14f186c3620f286d9600ed805ad9..eb8674cece9fd74f350f2cb2ffb14fe7bf5d69c1 100644
--- a/IO/CatalystConduit/CMakeLists.txt
+++ b/IO/CatalystConduit/CMakeLists.txt
@@ -15,4 +15,5 @@ vtk_module_link(VTK::IOCatalystConduit
   PUBLIC
     catalyst::catalyst)
 
+vtk_add_test_mangling(VTK::IOCatalystConduit)
 add_subdirectory(Catalyst)
diff --git a/IO/Cesium3DTiles/CMakeLists.txt b/IO/Cesium3DTiles/CMakeLists.txt
index 90146bef1fda469234ea3f5be2dfc7761008d3b8..219a34ec2a9125041bf90c5e8a45b231fcdc5c65 100644
--- a/IO/Cesium3DTiles/CMakeLists.txt
+++ b/IO/Cesium3DTiles/CMakeLists.txt
@@ -9,3 +9,4 @@ vtk_module_add_module(VTK::IOCesium3DTiles
   CLASSES ${classes}
   PRIVATE_CLASSES ${private_classes}
   )
+vtk_add_test_mangling(VTK::IOCesium3DTiles)
diff --git a/IO/Chemistry/CMakeLists.txt b/IO/Chemistry/CMakeLists.txt
index 32f7228b3f3c2747ff3ebbbcd0401249c90d2c8a..9bde792e65252aa5ff015e7bfe366bf5ad69e036 100644
--- a/IO/Chemistry/CMakeLists.txt
+++ b/IO/Chemistry/CMakeLists.txt
@@ -13,3 +13,4 @@ set(classes
 vtk_module_add_module(VTK::IOChemistry
   CLASSES ${classes}
 )
+vtk_add_test_mangling(VTK::IOChemistry)
diff --git a/IO/CityGML/CMakeLists.txt b/IO/CityGML/CMakeLists.txt
index 44c4eac8ade1166c0d5ef027abb21ba5fa2f4011..9e176de633fb48b61f4227e2cedaacf9ee820334 100644
--- a/IO/CityGML/CMakeLists.txt
+++ b/IO/CityGML/CMakeLists.txt
@@ -2,3 +2,4 @@ set(classes
   vtkCityGMLReader)
 vtk_module_add_module(VTK::IOCityGML
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOCityGML)
diff --git a/IO/Core/CMakeLists.txt b/IO/Core/CMakeLists.txt
index f92dcc6a93663057aeffde986e6130a725510a0e..2ed3b13976517423f76904f394ca9a18e655ff81 100644
--- a/IO/Core/CMakeLists.txt
+++ b/IO/Core/CMakeLists.txt
@@ -32,3 +32,4 @@ set(headers
 vtk_module_add_module(VTK::IOCore
   CLASSES ${classes}
   HEADERS ${headers})
+vtk_add_test_mangling(VTK::IOCore)
diff --git a/IO/EnSight/CMakeLists.txt b/IO/EnSight/CMakeLists.txt
index dce509b715c5d93f7eaf9ed2ebcc7e48311fb627..2e42131de63a7c0fe588effba64e8f96e249476c 100644
--- a/IO/EnSight/CMakeLists.txt
+++ b/IO/EnSight/CMakeLists.txt
@@ -9,3 +9,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOEnSight
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOEnSight)
diff --git a/IO/Exodus/CMakeLists.txt b/IO/Exodus/CMakeLists.txt
index 735e450edce43f1258d12829bc32c1db833cba9f..7f4302b548c39d17bd3cca0b963217504c3bf914 100644
--- a/IO/Exodus/CMakeLists.txt
+++ b/IO/Exodus/CMakeLists.txt
@@ -22,3 +22,4 @@ vtk_module_add_module(VTK::IOExodus
   TEMPLATE_CLASSES ${template_classes}
   NOWRAP_CLASSES ${nowrap_classes}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::IOExodus)
diff --git a/IO/Export/CMakeLists.txt b/IO/Export/CMakeLists.txt
index fa20600dabb2b838d607316bd41d96a7522c06ab..6c69b3735d6ebb345aff14255e2d66093ee0a5d0 100644
--- a/IO/Export/CMakeLists.txt
+++ b/IO/Export/CMakeLists.txt
@@ -23,3 +23,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOExport
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOExport)
diff --git a/IO/ExportGL2PS/CMakeLists.txt b/IO/ExportGL2PS/CMakeLists.txt
index c9c5135f41a50152429abb105ae195f9f20aab0d..6f7778b6537ad8a6199c760d437cebe163ac87a1 100644
--- a/IO/ExportGL2PS/CMakeLists.txt
+++ b/IO/ExportGL2PS/CMakeLists.txt
@@ -16,3 +16,4 @@ vtk_module_add_module(VTK::IOExportGL2PS
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOExportGL2PS)
diff --git a/IO/ExportPDF/CMakeLists.txt b/IO/ExportPDF/CMakeLists.txt
index bdc5e7c30dc46564e242c4354dc7f087f3a8dd66..989921a6e7feef172d757b55ed27ea9bb6c4def2 100644
--- a/IO/ExportPDF/CMakeLists.txt
+++ b/IO/ExportPDF/CMakeLists.txt
@@ -15,3 +15,4 @@ vtk_module_add_module(VTK::IOExportPDF
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOExportPDF)
diff --git a/IO/FFMPEG/CMakeLists.txt b/IO/FFMPEG/CMakeLists.txt
index ed43978cfc6b2bc839be68754e4722222fb09968..708ec6d0171682c443cbe9ecad2300e8566162ae 100644
--- a/IO/FFMPEG/CMakeLists.txt
+++ b/IO/FFMPEG/CMakeLists.txt
@@ -43,3 +43,4 @@ vtk_module_link(VTK::IOFFMPEG
     FFMPEG::avutil
     FFMPEG::swscale
     ${ffmpeg_libraries})
+vtk_add_test_mangling(VTK::IOFFMPEG)
diff --git a/IO/Fides/CMakeLists.txt b/IO/Fides/CMakeLists.txt
index a245dfc7674075ea9c91f431dd74f1a0aacde7f5..6e07dfae7f38381f4478e19e3bd5391e33be6a5a 100644
--- a/IO/Fides/CMakeLists.txt
+++ b/IO/Fides/CMakeLists.txt
@@ -5,3 +5,4 @@ vtk_module_add_module(VTK::IOFides
   CLASSES           ${classes})
 
 vtk_module_link(VTK::IOFides PRIVATE VTK::fides)
+vtk_add_test_mangling(VTK::IOFides)
diff --git a/IO/GDAL/CMakeLists.txt b/IO/GDAL/CMakeLists.txt
index 55baa0056b5384714d47187bd69646bbee72110b..ea76a0ab48d9ce71100118dc168401d1a92dad72 100644
--- a/IO/GDAL/CMakeLists.txt
+++ b/IO/GDAL/CMakeLists.txt
@@ -10,3 +10,4 @@ vtk_module_add_module(VTK::IOGDAL
 vtk_module_link(VTK::IOGDAL
   PRIVATE
     GDAL::GDAL)
+vtk_add_test_mangling(VTK::IOGDAL)
diff --git a/IO/GeoJSON/CMakeLists.txt b/IO/GeoJSON/CMakeLists.txt
index 80ec76e0fdfa6ff8830ffcd532cc6a66916f9f45..abafe833beddd6fd1b9a6de42ba9b6ec9e6f14ad 100644
--- a/IO/GeoJSON/CMakeLists.txt
+++ b/IO/GeoJSON/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOGeoJSON
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOGeoJSON)
diff --git a/IO/Geometry/CMakeLists.txt b/IO/Geometry/CMakeLists.txt
index 2b3e1c3f9d2da8147dc6a5998df1054058e1ea10..1d1c487efd12b3271dfa7a105a1d07b336be8802 100644
--- a/IO/Geometry/CMakeLists.txt
+++ b/IO/Geometry/CMakeLists.txt
@@ -35,3 +35,4 @@ vtk_module_add_module(VTK::IOGeometry
   CLASSES ${classes}
   PRIVATE_CLASSES ${private_classes}
   )
+vtk_add_test_mangling(VTK::IOGeometry)
diff --git a/IO/H5Rage/CMakeLists.txt b/IO/H5Rage/CMakeLists.txt
index 76388650be2f2c30e5755cd7d0b6fb3903a649f3..e119b6c44b137424d0fca390494b2eac9bd1f28d 100644
--- a/IO/H5Rage/CMakeLists.txt
+++ b/IO/H5Rage/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOH5Rage
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOH5Rage)
diff --git a/IO/H5part/CMakeLists.txt b/IO/H5part/CMakeLists.txt
index ad9ceba42a8a87ee6f5a48d9351519cca75ac5b5..1383e389fcf867d788f2ad5201f5fa10b0dc13aa 100644
--- a/IO/H5part/CMakeLists.txt
+++ b/IO/H5part/CMakeLists.txt
@@ -7,3 +7,4 @@ vtk_module_add_module(VTK::IOH5part
 vtk_module_definitions(VTK::IOH5part
   PRIVATE
     H5_USE_16_API)
+vtk_add_test_mangling(VTK::IOH5part)
diff --git a/IO/HDF/CMakeLists.txt b/IO/HDF/CMakeLists.txt
index 84842474c830783367bc6025b660c0598c2c7ae0..adb61adc131ce63fe7fe2b42c958e5b21363ea9f 100644
--- a/IO/HDF/CMakeLists.txt
+++ b/IO/HDF/CMakeLists.txt
@@ -10,3 +10,4 @@ vtk_module_add_module(VTK::IOHDF
   PRIVATE_CLASSES ${private_classes}
   PRIVATE_HEADERS vtkHDFReaderVersion.h
   )
+vtk_add_test_mangling(VTK::IOHDF)
diff --git a/IO/IOSS/CMakeLists.txt b/IO/IOSS/CMakeLists.txt
index bb22bda02d885b53518f6891c363a51a698ce9c0..d5d6d3d294e2045b935bdf9512882f0d228d8f1b 100644
--- a/IO/IOSS/CMakeLists.txt
+++ b/IO/IOSS/CMakeLists.txt
@@ -10,3 +10,4 @@ set(private_classes
 vtk_module_add_module(VTK::IOIOSS
   CLASSES ${classes}
   PRIVATE_CLASSES ${private_classes})
+vtk_add_test_mangling(VTK::IOIOSS)
diff --git a/IO/Image/CMakeLists.txt b/IO/Image/CMakeLists.txt
index 3aa3ab86180f5e85861b85936d6436d47cfc5149..9e2c32cccad23cfb49e430fa798210d0810e2518 100644
--- a/IO/Image/CMakeLists.txt
+++ b/IO/Image/CMakeLists.txt
@@ -46,3 +46,4 @@ set(private_headers
 vtk_module_add_module(VTK::IOImage
   PRIVATE_HEADERS ${private_headers}
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOImage)
diff --git a/IO/Import/CMakeLists.txt b/IO/Import/CMakeLists.txt
index 18541d6bc20eec6d1bb39da78713bbbdbbab4fd7..ca8ccb7db2ae881966555518813f2505d3cd79e5 100644
--- a/IO/Import/CMakeLists.txt
+++ b/IO/Import/CMakeLists.txt
@@ -15,3 +15,4 @@ vtk_module_add_module(VTK::IOImport
   CLASSES ${classes}
   NOWRAP_CLASSES  ${nowrap_classes}
   HEADERS ${headers})
+vtk_add_test_mangling(VTK::IOImport)
diff --git a/IO/Infovis/CMakeLists.txt b/IO/Infovis/CMakeLists.txt
index dff695ef6aeaa27c57b6e50ad9016ab61562e588..4cb8ddf00b6bb4c41373d4eb16bcaae0cb678cca 100644
--- a/IO/Infovis/CMakeLists.txt
+++ b/IO/Infovis/CMakeLists.txt
@@ -19,3 +19,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOInfovis
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOInfovis)
diff --git a/IO/LAS/CMakeLists.txt b/IO/LAS/CMakeLists.txt
index b7ade0ffd4e3bccdc88acc1ca8c78bcc27c9ab87..281e4b7213fd181194e3366c45efd724add9c3f6 100644
--- a/IO/LAS/CMakeLists.txt
+++ b/IO/LAS/CMakeLists.txt
@@ -32,3 +32,4 @@ vtk_module_link(VTK::IOLAS
 vtk_module_include(VTK::IOLAS
   PRIVATE
     ${libLAS_INCLUDE_DIRS})
+vtk_add_test_mangling(VTK::IOLAS)
diff --git a/IO/LSDyna/CMakeLists.txt b/IO/LSDyna/CMakeLists.txt
index c590977a537f1242e49a0c416bf776a0227451cc..701194a6066cde05f6cb5c5eeb6b3f570ed78ba5 100644
--- a/IO/LSDyna/CMakeLists.txt
+++ b/IO/LSDyna/CMakeLists.txt
@@ -11,3 +11,4 @@ set(nowrap_classes
 vtk_module_add_module(VTK::IOLSDyna
   CLASSES ${classes}
   NOWRAP_CLASSES ${nowrap_classes})
+vtk_add_test_mangling(VTK::IOLSDyna)
diff --git a/IO/Legacy/CMakeLists.txt b/IO/Legacy/CMakeLists.txt
index a0704f29ebf1c3931be793cce4f6135606e9161f..55786245f90574eae531e8431c06b9a385ea952b 100644
--- a/IO/Legacy/CMakeLists.txt
+++ b/IO/Legacy/CMakeLists.txt
@@ -31,3 +31,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOLegacy
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOLegacy)
diff --git a/IO/MINC/CMakeLists.txt b/IO/MINC/CMakeLists.txt
index e50dc7c7e661d7f1fcc74c59b733e95029cdf146..7b11bbf6683cfb036904218fec656c55145d8393 100644
--- a/IO/MINC/CMakeLists.txt
+++ b/IO/MINC/CMakeLists.txt
@@ -15,3 +15,4 @@ set(headers
 vtk_module_add_module(VTK::IOMINC
   CLASSES ${classes}
   HEADERS ${headers})
+vtk_add_test_mangling(VTK::IOMINC)
diff --git a/IO/MPIImage/CMakeLists.txt b/IO/MPIImage/CMakeLists.txt
index a63e772bd267efc17afa92d29cf4a56cac3af2e6..2700452b0bbe09fbeaffa4ee1ddab30906c8f0fa 100644
--- a/IO/MPIImage/CMakeLists.txt
+++ b/IO/MPIImage/CMakeLists.txt
@@ -19,3 +19,4 @@ vtk_module_add_module(VTK::IOMPIImage
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOMPIImage)
diff --git a/IO/MPIParallel/CMakeLists.txt b/IO/MPIParallel/CMakeLists.txt
index dae70f47d84ffce7a11447faa1a2f5d8c6d79582..e0b9a13b6a9ea572f8e7cb9786543083c941b893 100644
--- a/IO/MPIParallel/CMakeLists.txt
+++ b/IO/MPIParallel/CMakeLists.txt
@@ -18,3 +18,4 @@ vtk_module_add_module(VTK::IOMPIParallel
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOMPIParallel)
diff --git a/IO/MotionFX/CMakeLists.txt b/IO/MotionFX/CMakeLists.txt
index ba6bae499eff41315214c8734df115e3f0a94238..1add73edec2d743d6cec900aee2b4286adf74705 100644
--- a/IO/MotionFX/CMakeLists.txt
+++ b/IO/MotionFX/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOMotionFX
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOMotionFX)
diff --git a/IO/Movie/CMakeLists.txt b/IO/Movie/CMakeLists.txt
index abf9a6c67f11c32b3b4e303c1b6cc2a62bdca421..197a662398e20a8c29478a285146d123f5fbff5b 100644
--- a/IO/Movie/CMakeLists.txt
+++ b/IO/Movie/CMakeLists.txt
@@ -68,3 +68,4 @@ endif()
 
 vtk_module_link(VTK::IOMovie
   PRIVATE ${libs})
+vtk_add_test_mangling(VTK::IOMovie)
diff --git a/IO/MySQL/CMakeLists.txt b/IO/MySQL/CMakeLists.txt
index b1bed9bf5a1954cc82f0aeba4a25bbeb29dd7efa..6a9a07ccb44e35e7f5557bb923f6dccc315d0c68 100644
--- a/IO/MySQL/CMakeLists.txt
+++ b/IO/MySQL/CMakeLists.txt
@@ -15,3 +15,4 @@ vtk_module_find_package(PACKAGE MySQL)
 vtk_module_link(VTK::IOMySQL
   PRIVATE
     MySQL::MySQL)
+vtk_add_test_mangling(VTK::IOMySQL)
diff --git a/IO/NetCDF/CMakeLists.txt b/IO/NetCDF/CMakeLists.txt
index 07698ed594305c6480fd9be5b08429d4d8bb94ee..373927d4c51292bc336abd5142ab8f1f27c998ad 100644
--- a/IO/NetCDF/CMakeLists.txt
+++ b/IO/NetCDF/CMakeLists.txt
@@ -10,3 +10,4 @@ set(classes
 
 vtk_module_add_module(VTK::IONetCDF
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IONetCDF)
diff --git a/IO/ODBC/CMakeLists.txt b/IO/ODBC/CMakeLists.txt
index 0961a581bd6098d7da962dd7033c7c3290560e7a..492f8a8df3199194f0824c755500a2aaeb20c5d1 100644
--- a/IO/ODBC/CMakeLists.txt
+++ b/IO/ODBC/CMakeLists.txt
@@ -10,3 +10,4 @@ vtk_module_find_package(PACKAGE ODBC)
 vtk_module_link(VTK::IOODBC
   PRIVATE
     ODBC::ODBC)
+vtk_add_test_mangling(VTK::IOODBC)
diff --git a/IO/OMF/CMakeLists.txt b/IO/OMF/CMakeLists.txt
index ae0f45865854f86b79badd71d2cb77fe0e611da0..488f2997424f3f52616d761e38503daa7a2ec3da 100644
--- a/IO/OMF/CMakeLists.txt
+++ b/IO/OMF/CMakeLists.txt
@@ -17,3 +17,4 @@ vtk_module_add_module(VTK::IOOMF
   CLASSES           ${classes}
   PRIVATE_CLASSES   ${private_classes}
   PRIVATE_HEADERS   ${private_headers_core})
+vtk_add_test_mangling(VTK::IOOMF)
diff --git a/IO/OggTheora/CMakeLists.txt b/IO/OggTheora/CMakeLists.txt
index ef571c20aa64bcf8b41308dad22721605cf2c45a..54e4b10c62e1e15954f167fd3a07ccb35610ba9d 100644
--- a/IO/OggTheora/CMakeLists.txt
+++ b/IO/OggTheora/CMakeLists.txt
@@ -7,3 +7,4 @@ vtk_module_add_module(VTK::IOOggTheora
 # this is for legacy codes, should be dropped.
 vtk_module_definitions(VTK::IOOggTheora
   INTERFACE VTK_HAS_OGGTHEORA_SUPPORT)
+vtk_add_test_mangling(VTK::IOOggTheora)
diff --git a/IO/OpenVDB/CMakeLists.txt b/IO/OpenVDB/CMakeLists.txt
index 90f21fb292d8c1482186bdf0a71d5f74798c5800..65d979def5cb6cccd0380b428e6b8bbf70c92c53 100644
--- a/IO/OpenVDB/CMakeLists.txt
+++ b/IO/OpenVDB/CMakeLists.txt
@@ -17,3 +17,4 @@ vtk_module_add_module(VTK::IOOpenVDB
 vtk_module_link(VTK::IOOpenVDB
   PRIVATE
     OpenVDB::openvdb)
+vtk_add_test_mangling(VTK::IOOpenVDB)
diff --git a/IO/PDAL/CMakeLists.txt b/IO/PDAL/CMakeLists.txt
index d6cd57cdc7ff9fe982bd6d14639abe1e989786a6..40eee3238bf3feefed8bf786968563ec40394907 100644
--- a/IO/PDAL/CMakeLists.txt
+++ b/IO/PDAL/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_link(VTK::IOPDAL
 vtk_module_include(VTK::IOPDAL
   PRIVATE
     ${PDAL_INCLUDE_DIRS})
+vtk_add_test_mangling(VTK::IOPDAL)
diff --git a/IO/PIO/CMakeLists.txt b/IO/PIO/CMakeLists.txt
index 7aa5a6917ba67ff00610405e27f1bb40c8ecdc0d..730e9c858f3e577d6cd1a2caee59dad4f7184a07 100644
--- a/IO/PIO/CMakeLists.txt
+++ b/IO/PIO/CMakeLists.txt
@@ -7,3 +7,4 @@ set(classes
 vtk_module_add_module(VTK::IOPIO
   CLASSES ${classes}
   EXCLUDE_HEADER_TEST)
+vtk_add_test_mangling(VTK::IOPIO)
diff --git a/IO/PLY/CMakeLists.txt b/IO/PLY/CMakeLists.txt
index 39b0eef8dbc77686343841fd09b715aea8af19a6..dbe19bfc9db448074a5d3389d93b1272093ee10d 100644
--- a/IO/PLY/CMakeLists.txt
+++ b/IO/PLY/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOPLY
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOPLY)
diff --git a/IO/Parallel/CMakeLists.txt b/IO/Parallel/CMakeLists.txt
index 0c932554d3b6990cf8d97c42b9c10233a8adbc0c..4b00939c6b50e7e8a03f1f9e99e8b9efd43c7d6b 100644
--- a/IO/Parallel/CMakeLists.txt
+++ b/IO/Parallel/CMakeLists.txt
@@ -18,3 +18,4 @@ vtk_module_add_module(VTK::IOParallel
   CLASSES ${classes}
   SOURCES ${sources}
   PRIVATE_HEADERS ${private_headers})
+vtk_add_test_mangling(VTK::IOParallel)
diff --git a/IO/ParallelExodus/CMakeLists.txt b/IO/ParallelExodus/CMakeLists.txt
index 89fd17277a4187a2f8d0a370848ad12a0e7e0cdc..c6807515e9a2742844a41cce186e8c70c46dff0b 100644
--- a/IO/ParallelExodus/CMakeLists.txt
+++ b/IO/ParallelExodus/CMakeLists.txt
@@ -15,3 +15,4 @@ vtk_module_add_module(VTK::IOParallelExodus
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOParallelExodus)
diff --git a/IO/ParallelLSDyna/CMakeLists.txt b/IO/ParallelLSDyna/CMakeLists.txt
index 39c001bbab8022417c8a045825ad4f83a21d6d63..83be18b987f14ace23aa5a528d7c4de95e1a0d21 100644
--- a/IO/ParallelLSDyna/CMakeLists.txt
+++ b/IO/ParallelLSDyna/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOParallelLSDyna
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOParallelLSDyna)
diff --git a/IO/ParallelNetCDF/CMakeLists.txt b/IO/ParallelNetCDF/CMakeLists.txt
index 99557a130ea3dea7035f8918647739f9d378f13e..3e95d2b9d694a812e297b260fdf04d24f42b08e3 100644
--- a/IO/ParallelNetCDF/CMakeLists.txt
+++ b/IO/ParallelNetCDF/CMakeLists.txt
@@ -15,3 +15,4 @@ vtk_module_add_module(VTK::IOParallelNetCDF
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOParallelNetCDF)
diff --git a/IO/ParallelXML/CMakeLists.txt b/IO/ParallelXML/CMakeLists.txt
index ca0063e6bbbb03c64e178aab0e6f0cfe8b000e17..daecdc46becc2b41cf654221a5efacef55316748 100644
--- a/IO/ParallelXML/CMakeLists.txt
+++ b/IO/ParallelXML/CMakeLists.txt
@@ -22,3 +22,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOParallelXML
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOParallelXML)
diff --git a/IO/ParallelXdmf3/CMakeLists.txt b/IO/ParallelXdmf3/CMakeLists.txt
index 758174a5608847154d79509e972d98120a40c87d..c93a2e5af3c4296a5a2516e62ec321fb74babc13 100644
--- a/IO/ParallelXdmf3/CMakeLists.txt
+++ b/IO/ParallelXdmf3/CMakeLists.txt
@@ -14,3 +14,4 @@ vtk_module_add_module(VTK::IOParallelXdmf3
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::IOParallelXdmf3)
diff --git a/IO/PostgreSQL/CMakeLists.txt b/IO/PostgreSQL/CMakeLists.txt
index 75a4eef497edd316678f00ae09d07a3f338ed1bd..c486188109daf51c67a6febe52892d871f8c8772 100644
--- a/IO/PostgreSQL/CMakeLists.txt
+++ b/IO/PostgreSQL/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_add_module(VTK::IOPostgreSQL
 vtk_module_link(VTK::IOPostgreSQL
   PRIVATE
     PostgreSQL::PostgreSQL)
+vtk_add_test_mangling(VTK::IOPostgreSQL)
diff --git a/IO/SQL/CMakeLists.txt b/IO/SQL/CMakeLists.txt
index 7a3eb275aff978dd780927b4261aeb98b7e895ad..453caefcd810546c106e36838f313118f50735b6 100644
--- a/IO/SQL/CMakeLists.txt
+++ b/IO/SQL/CMakeLists.txt
@@ -20,3 +20,4 @@ set(private_headers
 vtk_module_add_module(VTK::IOSQL
   CLASSES ${classes}
   PRIVATE_HEADERS ${private_headers})
+vtk_add_test_mangling(VTK::IOSQL)
diff --git a/IO/SegY/CMakeLists.txt b/IO/SegY/CMakeLists.txt
index 269736ccc3cef52f54012de3ad98290c8d841932..64c8188b66a690d7cd43700db7c861b1f1b55852 100644
--- a/IO/SegY/CMakeLists.txt
+++ b/IO/SegY/CMakeLists.txt
@@ -9,3 +9,4 @@ set(private_classes
 vtk_module_add_module(VTK::IOSegY
   CLASSES ${classes}
   PRIVATE_CLASSES ${private_classes})
+vtk_add_test_mangling(VTK::IOSegY)
diff --git a/IO/TRUCHAS/CMakeLists.txt b/IO/TRUCHAS/CMakeLists.txt
index 1686bcce691e5487ebdd4b40b1c3e9aeadac2878..211581d9101c59485b03870ffcc6ba54f05c948c 100644
--- a/IO/TRUCHAS/CMakeLists.txt
+++ b/IO/TRUCHAS/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOTRUCHAS
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOTRUCHAS)
diff --git a/IO/TecplotTable/CMakeLists.txt b/IO/TecplotTable/CMakeLists.txt
index dc9c04ee6ed63be6b3f9935204e707f9a72dd99e..3132fff59850262e6c7ef2fb2907da97bcb5027a 100644
--- a/IO/TecplotTable/CMakeLists.txt
+++ b/IO/TecplotTable/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOTecplotTable
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOTecplotTable)
diff --git a/IO/VPIC/CMakeLists.txt b/IO/VPIC/CMakeLists.txt
index cf33fe3f5b4615562298a1c176582dd55b9b6a36..5241674a70eb6a8278e5144db18e008ce85cb7cd 100644
--- a/IO/VPIC/CMakeLists.txt
+++ b/IO/VPIC/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOVPIC
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOVPIC)
diff --git a/IO/VeraOut/CMakeLists.txt b/IO/VeraOut/CMakeLists.txt
index 42a787583c4468a8dd2776386a7b7fc0ba5273ec..9f2500e82f3ac416bb6aa2cfc52b2d2eb580a3c0 100644
--- a/IO/VeraOut/CMakeLists.txt
+++ b/IO/VeraOut/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOVeraOut
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOVeraOut)
diff --git a/IO/Video/CMakeLists.txt b/IO/Video/CMakeLists.txt
index 460e31d2850bf1067f84135a276d4a912eab7960..8e6b7818a229119e55b37643c2c43eec50706f36 100644
--- a/IO/Video/CMakeLists.txt
+++ b/IO/Video/CMakeLists.txt
@@ -44,3 +44,4 @@ if (WIN32 AND VTK_USE_VIDEO_FOR_WINDOWS)
     PRIVATE
       vfw32)
 endif ()
+vtk_add_test_mangling(VTK::IOVideo)
diff --git a/IO/XML/CMakeLists.txt b/IO/XML/CMakeLists.txt
index d190f2c923c760d5c2feb0a00357623c7d96620a..3937dd241eefcfd9425994ed39dc11413290c27a 100644
--- a/IO/XML/CMakeLists.txt
+++ b/IO/XML/CMakeLists.txt
@@ -54,3 +54,7 @@ set(classes
 
 vtk_module_add_module(VTK::IOXML
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOXML
+  # Ignore mangling for the C API
+  EXEMPTIONS
+    vtkXMLWriterC_)
diff --git a/IO/XMLParser/CMakeLists.txt b/IO/XMLParser/CMakeLists.txt
index 3d1202bdd30ff6f760c778605714d633dd12c046..d30cff51f1e2fce54ee87a970aa00ac4de8a98c9 100644
--- a/IO/XMLParser/CMakeLists.txt
+++ b/IO/XMLParser/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOXMLParser
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOXMLParser)
diff --git a/IO/XMLParser/vtkXMLParser.h b/IO/XMLParser/vtkXMLParser.h
index 76d236c7d83f1f6ab7e2f3319c934d7068cbbf51..d9434d96513847b19399f1030fab734c4e415956 100644
--- a/IO/XMLParser/vtkXMLParser.h
+++ b/IO/XMLParser/vtkXMLParser.h
@@ -30,12 +30,9 @@
 #include "vtkObject.h"
 
 VTK_ABI_NAMESPACE_BEGIN
-extern "C"
-{
-  void vtkXMLParserStartElement(void*, const char*, const char**);
-  void vtkXMLParserEndElement(void*, const char*);
-  void vtkXMLParserCharacterDataHandler(void*, const char*, int);
-}
+void vtkXMLParserStartElement(void*, const char*, const char**);
+void vtkXMLParserEndElement(void*, const char*);
+void vtkXMLParserCharacterDataHandler(void*, const char*, int);
 
 class VTKIOXMLPARSER_EXPORT vtkXMLParser : public vtkObject
 {
diff --git a/IO/Xdmf2/CMakeLists.txt b/IO/Xdmf2/CMakeLists.txt
index f3049ddae18e1236525836e62ce647f2698b01ba..0bfe6fc9398528a44a5394a24ea814640566cd40 100644
--- a/IO/Xdmf2/CMakeLists.txt
+++ b/IO/Xdmf2/CMakeLists.txt
@@ -11,3 +11,4 @@ set(nowrap_classes
 vtk_module_add_module(VTK::IOXdmf2
   CLASSES ${classes}
   NOWRAP_CLASSES ${nowrap_classes})
+vtk_add_test_mangling(VTK::IOXdmf2)
diff --git a/IO/Xdmf3/CMakeLists.txt b/IO/Xdmf3/CMakeLists.txt
index f3759741d8fffd6d830b794a0de6018606bbed84..3f3fe0671c9896f4058cc40e0ea8147d7f684478 100644
--- a/IO/Xdmf3/CMakeLists.txt
+++ b/IO/Xdmf3/CMakeLists.txt
@@ -10,3 +10,4 @@ set(classes
 
 vtk_module_add_module(VTK::IOXdmf3
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::IOXdmf3)
diff --git a/Imaging/Color/CMakeLists.txt b/Imaging/Color/CMakeLists.txt
index 4a24d172d0f8a70258e3fa5d5bbbc0a564ccefd7..a9f93b4458a11094e20b21cc40e22b108408fdb1 100644
--- a/Imaging/Color/CMakeLists.txt
+++ b/Imaging/Color/CMakeLists.txt
@@ -12,3 +12,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingColor
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingColor)
diff --git a/Imaging/Core/CMakeLists.txt b/Imaging/Core/CMakeLists.txt
index 0d1beff066b25ba2adac3a4abbe6ef273614d206..f508d472f9acf5dd48bea31bfeed4dba7e71a8d0 100644
--- a/Imaging/Core/CMakeLists.txt
+++ b/Imaging/Core/CMakeLists.txt
@@ -46,3 +46,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingCore)
diff --git a/Imaging/Fourier/CMakeLists.txt b/Imaging/Fourier/CMakeLists.txt
index 96f4237a42cf0e5f19fc1727049fd5ff0978565f..1eec590ccdae10aa010a322dac22eb392951465f 100644
--- a/Imaging/Fourier/CMakeLists.txt
+++ b/Imaging/Fourier/CMakeLists.txt
@@ -10,3 +10,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingFourier
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingFourier)
diff --git a/Imaging/General/CMakeLists.txt b/Imaging/General/CMakeLists.txt
index 2546fe447c1230fca9b4d08be4c68da7c62a13aa..dd4e99d3bc78c7ae544aea82309067a6eb479dac 100644
--- a/Imaging/General/CMakeLists.txt
+++ b/Imaging/General/CMakeLists.txt
@@ -25,3 +25,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingGeneral
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingGeneral)
diff --git a/Imaging/Hybrid/CMakeLists.txt b/Imaging/Hybrid/CMakeLists.txt
index ed14944774ca72136ec836b5272fb9508fa98997..04ca0bd32d57dc5e55ca2fbfc52b2fa0742cad4a 100644
--- a/Imaging/Hybrid/CMakeLists.txt
+++ b/Imaging/Hybrid/CMakeLists.txt
@@ -16,3 +16,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingHybrid
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingHybrid)
diff --git a/Imaging/Math/CMakeLists.txt b/Imaging/Math/CMakeLists.txt
index 5761a0dfead207ac7bbc0906082023409c855aba..263199fe2b6241d1cab52c7af931c78194837a27 100644
--- a/Imaging/Math/CMakeLists.txt
+++ b/Imaging/Math/CMakeLists.txt
@@ -10,3 +10,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingMath
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingMath)
diff --git a/Imaging/Morphological/CMakeLists.txt b/Imaging/Morphological/CMakeLists.txt
index 2a01727a6c8dc9eba99be78830c46ab46c0835f6..058a857c5faa3fb2a978a91b31829a38ca476a03 100644
--- a/Imaging/Morphological/CMakeLists.txt
+++ b/Imaging/Morphological/CMakeLists.txt
@@ -13,3 +13,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingMorphological
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingMorphological)
diff --git a/Imaging/OpenGL2/CMakeLists.txt b/Imaging/OpenGL2/CMakeLists.txt
index 368bbf3e4d07611337409feb2e16d4f85c5aec9c..00b5d9dc0b396a2919372aedd8c9ce1d014a52f5 100644
--- a/Imaging/OpenGL2/CMakeLists.txt
+++ b/Imaging/OpenGL2/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingOpenGL2
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingOpenGL2)
diff --git a/Imaging/Sources/CMakeLists.txt b/Imaging/Sources/CMakeLists.txt
index 855d0010d2d290459cbf495c5028009e4c022455..048e5a13482af247cbd44e0c9e585812e8850707 100644
--- a/Imaging/Sources/CMakeLists.txt
+++ b/Imaging/Sources/CMakeLists.txt
@@ -9,3 +9,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingSources
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingSources)
diff --git a/Imaging/Statistics/CMakeLists.txt b/Imaging/Statistics/CMakeLists.txt
index 62557cad77a89abcb5e7462d8a6c26403e977ea9..3ae0d125873ba9a982ec4649ddd330bc1db3f688 100644
--- a/Imaging/Statistics/CMakeLists.txt
+++ b/Imaging/Statistics/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingStatistics
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingStatistics)
diff --git a/Imaging/Stencil/CMakeLists.txt b/Imaging/Stencil/CMakeLists.txt
index dfef2c393c2901865252c86073da177fb868365c..821161495ff20a9e6db4e81c4b815871284cdde9 100644
--- a/Imaging/Stencil/CMakeLists.txt
+++ b/Imaging/Stencil/CMakeLists.txt
@@ -9,3 +9,4 @@ set(classes
 
 vtk_module_add_module(VTK::ImagingStencil
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ImagingStencil)
diff --git a/Infovis/Boost/CMakeLists.txt b/Infovis/Boost/CMakeLists.txt
index 2873f8f446f0b7351c873d0b1ce6646b1ebb46f8..22af34a1b0f401bb1efa2e1b987ec8a5f5ce54ad 100644
--- a/Infovis/Boost/CMakeLists.txt
+++ b/Infovis/Boost/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_find_package(
 vtk_module_link(VTK::InfovisBoost
   INTERFACE
     Boost::serialization)
+vtk_add_test_mangling(VTK::InfovisBoost)
diff --git a/Infovis/BoostGraphAlgorithms/CMakeLists.txt b/Infovis/BoostGraphAlgorithms/CMakeLists.txt
index df03ec3da20483399c305911043f861ff5473c54..5bac8a9850ab4c87682dff6e050f966b88e0d147 100644
--- a/Infovis/BoostGraphAlgorithms/CMakeLists.txt
+++ b/Infovis/BoostGraphAlgorithms/CMakeLists.txt
@@ -27,3 +27,4 @@ vtk_module_find_package(
 vtk_module_link(VTK::InfovisBoostGraphAlgorithms
   PUBLIC
     Boost::boost)
+vtk_add_test_mangling(VTK::InfovisBoostGraphAlgorithms)
diff --git a/Infovis/Core/CMakeLists.txt b/Infovis/Core/CMakeLists.txt
index a437bebe8a360c31e954a08f9df1ac1b2c3108c6..5147cbf7b11dc2dccbd8f456fa4880bdb6073146 100644
--- a/Infovis/Core/CMakeLists.txt
+++ b/Infovis/Core/CMakeLists.txt
@@ -47,3 +47,4 @@ set(classes
 
 vtk_module_add_module(VTK::InfovisCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::InfovisCore)
diff --git a/Infovis/Layout/CMakeLists.txt b/Infovis/Layout/CMakeLists.txt
index 49689ea20def85b1343cc36259d56cad66dc0182..e9b46e2bb7d27a54c62e039a0017438fcffd134e 100644
--- a/Infovis/Layout/CMakeLists.txt
+++ b/Infovis/Layout/CMakeLists.txt
@@ -46,3 +46,4 @@ set(classes
 
 vtk_module_add_module(VTK::InfovisLayout
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::InfovisLayout)
diff --git a/Interaction/Image/CMakeLists.txt b/Interaction/Image/CMakeLists.txt
index 6ddfe02337dafb17c0c31614d7a208d7814bf860..6c232d39a3331ea7d8444f3e84b5928cd890c07f 100644
--- a/Interaction/Image/CMakeLists.txt
+++ b/Interaction/Image/CMakeLists.txt
@@ -7,3 +7,4 @@ set(classes
 
 vtk_module_add_module(VTK::InteractionImage
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::InteractionImage)
diff --git a/Interaction/Style/CMakeLists.txt b/Interaction/Style/CMakeLists.txt
index 735f3971b7c9efc8fe3d1bfa998a35ea489819da..7c0f71cf2f9b1cb502c1b5cfc4078b14c8417409 100644
--- a/Interaction/Style/CMakeLists.txt
+++ b/Interaction/Style/CMakeLists.txt
@@ -37,3 +37,4 @@ vtk_module_add_module(VTK::InteractionStyle
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::InteractionStyle)
diff --git a/Interaction/Widgets/CMakeLists.txt b/Interaction/Widgets/CMakeLists.txt
index aa1fde043b7c073134a45e645eb0f0f68286cd0c..228973df126ba87157984202b23f0c93e3015079 100644
--- a/Interaction/Widgets/CMakeLists.txt
+++ b/Interaction/Widgets/CMakeLists.txt
@@ -164,3 +164,4 @@ set(classes
 
 vtk_module_add_module(VTK::InteractionWidgets
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::InteractionWidgets)
diff --git a/Parallel/Core/CMakeLists.txt b/Parallel/Core/CMakeLists.txt
index 637fbaa4c41f09e88c8603950c4afd620618d6a2..235c4ffde7d2664708d81e9ecd77ce52bef92935 100644
--- a/Parallel/Core/CMakeLists.txt
+++ b/Parallel/Core/CMakeLists.txt
@@ -29,3 +29,4 @@ vtk_module_add_module(VTK::ParallelCore
   NOWRAP_HEADERS    vtkMultiProcessStreamSerialization.h
   TEMPLATE_CLASSES  ${template_classes}
   PRIVATE_HEADERS   ${hash_header})
+vtk_add_test_mangling(VTK::ParallelCore)
diff --git a/Parallel/DIY/CMakeLists.txt b/Parallel/DIY/CMakeLists.txt
index 229bed7876ab3255b9097b3099b85056887d00a8..b2af0908c5a9eb2e5d35b4b669ef06b6c1165b14 100644
--- a/Parallel/DIY/CMakeLists.txt
+++ b/Parallel/DIY/CMakeLists.txt
@@ -14,3 +14,4 @@ vtk_module_add_module(VTK::ParallelDIY
 
 vtk_module_definitions(VTK::ParallelDIY
   PUBLIC DIY_NO_THREADS)
+vtk_add_test_mangling(VTK::ParallelDIY)
diff --git a/Parallel/MPI/CMakeLists.txt b/Parallel/MPI/CMakeLists.txt
index b2c3607f9841e2f0e643785da7d75a85145c90be..f7be8d33f28bae13d4e962a334e0ac85ce1ba643 100644
--- a/Parallel/MPI/CMakeLists.txt
+++ b/Parallel/MPI/CMakeLists.txt
@@ -9,3 +9,4 @@ set(nowrap_headers
 vtk_module_add_module(VTK::ParallelMPI
   CLASSES ${classes}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::ParallelMPI)
diff --git a/Parallel/MPI/vtkMPICommunicator.cxx b/Parallel/MPI/vtkMPICommunicator.cxx
index 404a0eac60941dc7ed7995c02ea49f63bf5713c9..c25ff4631f746f48fb70fcdcd27eeb928238abe6 100644
--- a/Parallel/MPI/vtkMPICommunicator.cxx
+++ b/Parallel/MPI/vtkMPICommunicator.cxx
@@ -57,7 +57,7 @@ MPI_Comm* vtkMPICommunicatorOpaqueComm::GetHandle()
 // This MPI error handler basically does the same thing as the default error
 // handler, but also provides a convenient place to attach a debugger
 // breakpoint.
-extern "C" void vtkMPICommunicatorMPIErrorHandler(MPI_Comm* comm, int* errorcode, ...)
+static void vtkMPICommunicatorMPIErrorHandler(MPI_Comm* comm, int* errorcode, ...)
 {
   char ErrorMessage[MPI_MAX_ERROR_STRING];
   int len;
@@ -350,10 +350,10 @@ int vtkMPICommunicatorIprobe(int source, int tag, int* flag, int* actualSource,
 // with the __stdcall decoration.
 static vtkCommunicator::Operation* CurrentOperation;
 #ifdef MPIAPI
-extern "C" void MPIAPI vtkMPICommunicatorUserFunction(
+static void MPIAPI vtkMPICommunicatorUserFunction(
   void* invec, void* inoutvec, int* len, MPI_Datatype* datatype)
 #else
-extern "C" void vtkMPICommunicatorUserFunction(
+static void vtkMPICommunicatorUserFunction(
   void* invec, void* inoutvec, int* len, MPI_Datatype* datatype)
 #endif
 {
diff --git a/Parallel/MPI4Py/CMakeLists.txt b/Parallel/MPI4Py/CMakeLists.txt
index 1e16f6a2969d6a3086799652cdf18444619a54f4..c996c6963cf41015a9a695c6bdd5b22b633d475d 100644
--- a/Parallel/MPI4Py/CMakeLists.txt
+++ b/Parallel/MPI4Py/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::ParallelMPI4Py
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ParallelMPI4Py)
diff --git a/Rendering/Annotation/CMakeLists.txt b/Rendering/Annotation/CMakeLists.txt
index 59fc1bf186a22e5858e144b19e52ca96e429c840..b0620eeeacd54aaf117a8225ab3667d3faa64427 100644
--- a/Rendering/Annotation/CMakeLists.txt
+++ b/Rendering/Annotation/CMakeLists.txt
@@ -29,3 +29,4 @@ set(nowrap_headers
 vtk_module_add_module(VTK::RenderingAnnotation
   CLASSES ${classes}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::RenderingAnnotation)
diff --git a/Rendering/Context2D/CMakeLists.txt b/Rendering/Context2D/CMakeLists.txt
index 1bbcc7dc11dd066fb17515e27b010ce4c9fc5874..154a5b27a13482296460a4c785bd3ef3a81af980 100644
--- a/Rendering/Context2D/CMakeLists.txt
+++ b/Rendering/Context2D/CMakeLists.txt
@@ -25,3 +25,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingContext2D
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingContext2D)
diff --git a/Rendering/ContextOpenGL2/CMakeLists.txt b/Rendering/ContextOpenGL2/CMakeLists.txt
index ebd4240a9d1de6d6b375ade3b7c28e7ee353809b..f96e05d672ed62faeeccc745d0948d9bcb2b7967 100644
--- a/Rendering/ContextOpenGL2/CMakeLists.txt
+++ b/Rendering/ContextOpenGL2/CMakeLists.txt
@@ -31,3 +31,5 @@ vtk_module_add_module(VTK::RenderingContextOpenGL2
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${private_headers} ${vtk_object_factory_header})
+
+vtk_add_test_mangling(VTK::RenderingContextOpenGL2)
diff --git a/Rendering/Core/CMakeLists.txt b/Rendering/Core/CMakeLists.txt
index d077899800a54e29c0d27cdad4332ae8f1c019b6..c2ead10cbd7cc8628bd1ab74cc5fb64f548342dd 100644
--- a/Rendering/Core/CMakeLists.txt
+++ b/Rendering/Core/CMakeLists.txt
@@ -193,3 +193,4 @@ if (VTK_DEFAULT_RENDER_WINDOW_OFFSCREEN)
     PRIVATE
       VTK_DEFAULT_RENDER_WINDOW_OFFSCREEN)
 endif()
+vtk_add_test_mangling(VTK::RenderingCore)
diff --git a/Rendering/External/CMakeLists.txt b/Rendering/External/CMakeLists.txt
index df827273f9c77e8ee97fe089a78920e36b4a6cca..d6af67393cc13e65cbe27709f57ee686bfff3d67 100644
--- a/Rendering/External/CMakeLists.txt
+++ b/Rendering/External/CMakeLists.txt
@@ -11,3 +11,4 @@ vtk_module_add_module(VTK::RenderingExternal
 vtk_module_definitions(VTK::RenderingExternal
   PRIVATE
     VTK_OPENGL2)
+vtk_add_test_mangling(VTK::RenderingExternal)
diff --git a/Rendering/FFMPEGOpenGL2/CMakeLists.txt b/Rendering/FFMPEGOpenGL2/CMakeLists.txt
index 1bdb9102681b1118000757a2a361110ab7efe301..b82b5256ee2a34967191229bc9826358f2a49d61 100644
--- a/Rendering/FFMPEGOpenGL2/CMakeLists.txt
+++ b/Rendering/FFMPEGOpenGL2/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 vtk_module_add_module(VTK::RenderingFFMPEGOpenGL2
   CLASSES ${classes}
   )
+vtk_add_test_mangling(VTK::RenderingFFMPEGOpenGL2)
diff --git a/Rendering/FreeType/CMakeLists.txt b/Rendering/FreeType/CMakeLists.txt
index 1a755d5556964f8628fa5de0bc6728cec36cb65a..8629199f831011fc82071b9c6bd39dd2bf826064 100644
--- a/Rendering/FreeType/CMakeLists.txt
+++ b/Rendering/FreeType/CMakeLists.txt
@@ -38,3 +38,4 @@ vtk_module_add_module(VTK::RenderingFreeType
   CLASSES         ${classes}
   SOURCES         ${sources}
   PRIVATE_HEADERS ${private_headers})
+vtk_add_test_mangling(VTK::RenderingFreeType)
diff --git a/Rendering/FreeTypeFontConfig/CMakeLists.txt b/Rendering/FreeTypeFontConfig/CMakeLists.txt
index 92d85c81954667ac08a8efec1988ae5cea26c75d..3261576e22dfcb2bd5652ce8b2afd0c00c74904d 100644
--- a/Rendering/FreeTypeFontConfig/CMakeLists.txt
+++ b/Rendering/FreeTypeFontConfig/CMakeLists.txt
@@ -19,3 +19,4 @@ vtk_module_find_package(PACKAGE FontConfig)
 vtk_module_link(VTK::RenderingFreeTypeFontConfig
   PRIVATE
     FontConfig::FontConfig)
+vtk_add_test_mangling(VTK::RenderingFreeTypeFontConfig)
diff --git a/Rendering/GL2PSOpenGL2/CMakeLists.txt b/Rendering/GL2PSOpenGL2/CMakeLists.txt
index b38280b9cfaf2b0efec1dd91247f7acb686377cc..8aab7957b5d820f06367d7fedbbe656b0e39d26e 100644
--- a/Rendering/GL2PSOpenGL2/CMakeLists.txt
+++ b/Rendering/GL2PSOpenGL2/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_add_module(VTK::RenderingGL2PSOpenGL2
   CLASSES ${classes}
   SOURCES ${vtk_object_factory_source}
   PRIVATE_HEADERS ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::RenderingGL2PSOpenGL2)
diff --git a/Rendering/HyperTreeGrid/CMakeLists.txt b/Rendering/HyperTreeGrid/CMakeLists.txt
index 6e19050821e3624450777fca52edf6171d051c32..9085c0830e8cfa58ad56e2baa8671a0f6c1541df 100644
--- a/Rendering/HyperTreeGrid/CMakeLists.txt
+++ b/Rendering/HyperTreeGrid/CMakeLists.txt
@@ -10,3 +10,4 @@ if (VTK_DEFAULT_RENDER_WINDOW_OFFSCREEN)
     PRIVATE
       VTK_DEFAULT_RENDER_WINDOW_OFFSCREEN)
 endif()
+vtk_add_test_mangling(VTK::RenderingHyperTreeGrid)
diff --git a/Rendering/Image/CMakeLists.txt b/Rendering/Image/CMakeLists.txt
index 6837ca66be72f3775f213ed9f24530e6f667db7c..e45256538ac00fd809ec0e85ee4f640fd144fc7c 100644
--- a/Rendering/Image/CMakeLists.txt
+++ b/Rendering/Image/CMakeLists.txt
@@ -6,3 +6,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingImage
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingImage)
diff --git a/Rendering/LICOpenGL2/CMakeLists.txt b/Rendering/LICOpenGL2/CMakeLists.txt
index 40c19f153fce05cea4a2e92e334e14a65b596379..ca791e9333ded0ffb45d5b821712d6a692eefcae 100644
--- a/Rendering/LICOpenGL2/CMakeLists.txt
+++ b/Rendering/LICOpenGL2/CMakeLists.txt
@@ -59,3 +59,4 @@ if (VTK_RENDERINGPARALLELLIC_LINEINTEGRALCONVOLUTION2D_TIMER)
     PRIVATE
       vtkLineIntegralConvolution2DTIME)
 endif ()
+vtk_add_test_mangling(VTK::RenderingLICOpenGL2)
diff --git a/Rendering/LOD/CMakeLists.txt b/Rendering/LOD/CMakeLists.txt
index 44e6910f8bf095dbfdc668ff78b842f8c48c5240..c9e33c0ec9a6dd70677d9da1152866fecac97179 100644
--- a/Rendering/LOD/CMakeLists.txt
+++ b/Rendering/LOD/CMakeLists.txt
@@ -4,3 +4,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingLOD
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingLOD)
diff --git a/Rendering/Label/CMakeLists.txt b/Rendering/Label/CMakeLists.txt
index 872289b19c8fe2c3773c7fc14a516f0dd1b5d14d..47d840c4e08a817ec48c27146ebe4576d0a3f10b 100644
--- a/Rendering/Label/CMakeLists.txt
+++ b/Rendering/Label/CMakeLists.txt
@@ -15,3 +15,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingLabel
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingLabel)
diff --git a/Rendering/Matplotlib/CMakeLists.txt b/Rendering/Matplotlib/CMakeLists.txt
index b407f20ba272e638f878e2009eb19730064bea68..8d1a34c2c9e0e1c9f6307bcf8a3886bbd0178683 100644
--- a/Rendering/Matplotlib/CMakeLists.txt
+++ b/Rendering/Matplotlib/CMakeLists.txt
@@ -17,3 +17,4 @@ vtk_module_add_module(VTK::RenderingMatplotlib
 set_property(GLOBAL APPEND
   PROPERTY
     vtk_required_python_modules "matplotlib>=2.0.0")
+vtk_add_test_mangling(VTK::RenderingMatplotlib)
diff --git a/Rendering/OpenGL2/CMakeLists.txt b/Rendering/OpenGL2/CMakeLists.txt
index 98ed39437efb6ae46bec024cb1885ff75dad8620..b8a04488c7aecac1a8b235b8e0cb104dc823e4d9 100644
--- a/Rendering/OpenGL2/CMakeLists.txt
+++ b/Rendering/OpenGL2/CMakeLists.txt
@@ -406,3 +406,4 @@ if (NOT ANDROID AND
     TARGETS vtkProbeOpenGLVersion
     MODULES VTK::RenderingOpenGL2)
 endif ()
+vtk_add_test_mangling(VTK::RenderingOpenGL2)
diff --git a/Rendering/OpenVR/CMakeLists.txt b/Rendering/OpenVR/CMakeLists.txt
index e3a122d611f749a87b3bdfa7ae00cfdb55049865..fcdb708f08c3257a52adf3173241ff064be9dcbe 100644
--- a/Rendering/OpenVR/CMakeLists.txt
+++ b/Rendering/OpenVR/CMakeLists.txt
@@ -45,3 +45,4 @@ install(
   DESTINATION "${CMAKE_INSTALL_BINDIR}"
   COMPONENT   runtime
 )
+vtk_add_test_mangling(VTK::RenderingOpenVR)
diff --git a/Rendering/OpenXR/CMakeLists.txt b/Rendering/OpenXR/CMakeLists.txt
index 26093a07094858c4625e72628c667969f9ed4c34..4a5f57945c7fbae9df8b8a6515bd32b565574c5a 100644
--- a/Rendering/OpenXR/CMakeLists.txt
+++ b/Rendering/OpenXR/CMakeLists.txt
@@ -55,3 +55,4 @@ install(
   DESTINATION "${CMAKE_INSTALL_BINDIR}"
   COMPONENT   runtime
 )
+vtk_add_test_mangling(VTK::RenderingOpenXR)
diff --git a/Rendering/Parallel/CMakeLists.txt b/Rendering/Parallel/CMakeLists.txt
index 827f5ed0d48b896fdaaf7745c0c57e8b98a9e54e..f86d63b48e6b39c9a87229af59e3c234b19ada0a 100644
--- a/Rendering/Parallel/CMakeLists.txt
+++ b/Rendering/Parallel/CMakeLists.txt
@@ -39,3 +39,4 @@ vtk_module_add_module(VTK::RenderingParallel
 vtk_module_definitions(VTK::RenderingParallel
   PRIVATE
     VTK_OPENGL2)
+vtk_add_test_mangling(VTK::RenderingParallel)
diff --git a/Rendering/ParallelLIC/CMakeLists.txt b/Rendering/ParallelLIC/CMakeLists.txt
index c58a4abf8a37166109603629ff183b68e167c85a..a37c38299562c181c4840069fc64d17aa5bef423 100644
--- a/Rendering/ParallelLIC/CMakeLists.txt
+++ b/Rendering/ParallelLIC/CMakeLists.txt
@@ -62,3 +62,4 @@ if (VTK_RENDERINGPARALLELLIC_LINEINTEGRALCONVOLUTION2D_TIMER)
     PRIVATE
       vtkLineIntegralConvolution2DTIME)
 endif()
+vtk_add_test_mangling(VTK::RenderingParallelLIC)
diff --git a/Rendering/PythonContext2D/CMakeLists.txt b/Rendering/PythonContext2D/CMakeLists.txt
index 9d8f6566441c96272dfbd3cb146dc7a673f2911e..4a285b05b75954df19e52f1bf8d5f31c9522bfb1 100644
--- a/Rendering/PythonContext2D/CMakeLists.txt
+++ b/Rendering/PythonContext2D/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::PythonContext2D
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::PythonContext2D)
diff --git a/Rendering/Qt/CMakeLists.txt b/Rendering/Qt/CMakeLists.txt
index 8072c9361e1a775e24d00eb80fe88daf5faae562..62c14927e9c7e16b8ee77f55073d18309f59e758 100644
--- a/Rendering/Qt/CMakeLists.txt
+++ b/Rendering/Qt/CMakeLists.txt
@@ -16,3 +16,4 @@ vtk_module_find_package(
   FORWARD_VERSION_REQ MINOR
   VERSION_VAR         "Qt${vtk_qt_major_version}_VERSION")
 vtk_module_link(VTK::RenderingQt PUBLIC "Qt${vtk_qt_major_version}::Widgets")
+vtk_add_test_mangling(VTK::RenderingQt)
diff --git a/Rendering/RayTracing/CMakeLists.txt b/Rendering/RayTracing/CMakeLists.txt
index f60edf762cff485990fd5bd1295c72bd77223b66..47d1e6f40ffb0f7d71d9a6e62db8f999673fad9f 100644
--- a/Rendering/RayTracing/CMakeLists.txt
+++ b/Rendering/RayTracing/CMakeLists.txt
@@ -100,3 +100,4 @@ if (VTK_ENABLE_VISRTX)
     PRIVATE
       VTK_ENABLE_VISRTX)
 endif ()
+vtk_add_test_mangling(VTK::RenderingRayTracing)
diff --git a/Rendering/SceneGraph/CMakeLists.txt b/Rendering/SceneGraph/CMakeLists.txt
index 567fb2663967bf43570370d9b6a81f69bb2f1ba9..46fa55e8076b80cb50ec94cfb02c09ebd58116ec 100644
--- a/Rendering/SceneGraph/CMakeLists.txt
+++ b/Rendering/SceneGraph/CMakeLists.txt
@@ -13,3 +13,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingSceneGraph
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingSceneGraph)
diff --git a/Rendering/Tk/CMakeLists.txt b/Rendering/Tk/CMakeLists.txt
index 6a7b84ab114ec2e64f0c4f200bee96d8b8dae7c5..38e59f86c90a0b61767bbf6a728c6e87fadfd297 100644
--- a/Rendering/Tk/CMakeLists.txt
+++ b/Rendering/Tk/CMakeLists.txt
@@ -67,3 +67,4 @@ vtk_module_include(VTK::RenderingTk
     ${TCL_INCLUDE_PATH}
     ${TK_INCLUDE_PATH}
     ${TK_INTERNAL_PATH})
+vtk_add_test_mangling(VTK::RenderingTk)
diff --git a/Rendering/UI/CMakeLists.txt b/Rendering/UI/CMakeLists.txt
index 034e239110eb30429a22fac7b27937cc45f91d7c..f715ead3b5cf05dabdcd75ae62192972b631a776 100644
--- a/Rendering/UI/CMakeLists.txt
+++ b/Rendering/UI/CMakeLists.txt
@@ -115,3 +115,4 @@ endif ()
 if (APPLE_IOS)
   vtk_module_link(VTK::RenderingUI PUBLIC "-framework UIKit")
 endif ()
+vtk_add_test_mangling(VTK::RenderingUI)
diff --git a/Rendering/VR/CMakeLists.txt b/Rendering/VR/CMakeLists.txt
index b28fed62ea93e71c99b3eb1258e286a2aefac95b..f65a8f78e5146eb8bd83961e3ef77bff8940aaa8 100644
--- a/Rendering/VR/CMakeLists.txt
+++ b/Rendering/VR/CMakeLists.txt
@@ -81,3 +81,4 @@ if (VTK_ENABLE_VR_COLLABORATION)
 
   vtk_module_link(VTK::RenderingVR PRIVATE "${zmq_target}")
 endif ()
+vtk_add_test_mangling(VTK::RenderingVR)
diff --git a/Rendering/Volume/CMakeLists.txt b/Rendering/Volume/CMakeLists.txt
index 90d654f7edd6bec01bd430a064b0e26f00f77b1e..be205d746498a139707360664380a2fa5357037d 100644
--- a/Rendering/Volume/CMakeLists.txt
+++ b/Rendering/Volume/CMakeLists.txt
@@ -36,3 +36,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingVolume
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingVolume)
diff --git a/Rendering/VolumeAMR/CMakeLists.txt b/Rendering/VolumeAMR/CMakeLists.txt
index a4c5a6ead085a0765758f457ed06a5a482ff5c88..7370ee63f17db3f986b4ba261797d6e838dddce8 100644
--- a/Rendering/VolumeAMR/CMakeLists.txt
+++ b/Rendering/VolumeAMR/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingVolumeAMR
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingVolumeAMR)
diff --git a/Rendering/VolumeOpenGL2/CMakeLists.txt b/Rendering/VolumeOpenGL2/CMakeLists.txt
index 7b03111f508ebadcd643a070e18146c02e296168..cd8f1d15942e8ea9586d7146d1c83e78726cb39b 100644
--- a/Rendering/VolumeOpenGL2/CMakeLists.txt
+++ b/Rendering/VolumeOpenGL2/CMakeLists.txt
@@ -63,3 +63,4 @@ vtk_module_add_module(VTK::RenderingVolumeOpenGL2
   NOWRAP_TEMPLATE_CLASSES  ${nowrap_template_classes}
   SOURCES ${sources} ${vtk_object_factory_source}
   PRIVATE_HEADERS ${private_headers} ${vtk_object_factory_header})
+vtk_add_test_mangling(VTK::RenderingVolumeOpenGL2)
diff --git a/Rendering/VtkJS/CMakeLists.txt b/Rendering/VtkJS/CMakeLists.txt
index 2f6eaeb2a56705d43a9d49747bddbc231b2b5b97..25d3611a8f20f22305fc7fa1a2e92e5d529cefd0 100644
--- a/Rendering/VtkJS/CMakeLists.txt
+++ b/Rendering/VtkJS/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::RenderingVtkJS
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::RenderingVtkJS)
diff --git a/Testing/Core/CMakeLists.txt b/Testing/Core/CMakeLists.txt
index bd11a0960846656da9d9a5e150774d8de65848c6..a77bb29566eff90cc8e5a25efac746ed7a104caf 100644
--- a/Testing/Core/CMakeLists.txt
+++ b/Testing/Core/CMakeLists.txt
@@ -35,3 +35,4 @@ foreach (module IN LISTS built_modules)
   file(APPEND "${system_info_file}"
     "${module_text}\n")
 endforeach ()
+vtk_add_test_mangling(VTK::TestingCore)
diff --git a/Testing/Core/CheckSymbolMangling.py b/Testing/Core/CheckSymbolMangling.py
new file mode 100755
index 0000000000000000000000000000000000000000..8bd516e7cd2b213fdb399b346721f8b07a500401
--- /dev/null
+++ b/Testing/Core/CheckSymbolMangling.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+
+import os
+import argparse as cli
+
+def isWindows():
+    return os.name == 'nt'
+
+def LibrarySymbols(lib):
+    sym_list = []
+    if isWindows():
+        stream = os.popen('dumpbin /SYMBOLS /EXPORTS %s' % lib)
+        for line in stream:
+            sym = line.split('|')[1].strip()
+            sym_list.append(sym)
+    else:
+        stream = os.popen('nm %s' % lib)
+        sym_codes = ['B', 'D', 'R', 'T']
+        for line in stream:
+            if len(line) < 20:
+                continue
+
+            if line[17] in sym_codes:
+                sym = line[19:].strip()
+                sym_list.append(sym)
+    return sym_list
+
+
+parser = cli.ArgumentParser()
+
+parser.add_argument(
+    '--files',
+    help='List of binary files to parse symbols from')
+parser.add_argument(
+    '--prefix',
+    help='Mangling prefix.')
+parser.add_argument(
+    '--exemptions',
+    help='Ignore mangling for exempt symbols.')
+args = parser.parse_args()
+
+if not args.prefix:
+    print('No prefix to check.')
+    exit(0)
+
+exemptions = args.exemptions.split(';')
+
+bad_sym = []
+
+for o in args.files.split(';'):
+    for sym in LibrarySymbols(o):
+        if not args.prefix in sym:
+            if not any(exempt in sym for exempt in exemptions):
+                bad_sym.append(sym)
+
+if bad_sym:
+    print('Found symbols that are missing mangling.')
+    for sym in bad_sym:
+        print("  + %s" % sym)
+    exit(1)
diff --git a/Testing/DataModel/CMakeLists.txt b/Testing/DataModel/CMakeLists.txt
index 33009953c798f4c244d70eb87f76641396192055..eba78d08d800ffe6523502e8fa285d0fcaa67e1c 100644
--- a/Testing/DataModel/CMakeLists.txt
+++ b/Testing/DataModel/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::TestingDataModel
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::TestingDataModel)
diff --git a/Testing/GenericBridge/CMakeLists.txt b/Testing/GenericBridge/CMakeLists.txt
index 906ad2cc7dc0aa0126d5ed140a92629bc0c2738f..9b2eefa51ad224b7f701dbe6b4c3351ef866c1b0 100644
--- a/Testing/GenericBridge/CMakeLists.txt
+++ b/Testing/GenericBridge/CMakeLists.txt
@@ -19,3 +19,4 @@ set(headers
 vtk_module_add_module(VTK::TestingGenericBridge
   CLASSES ${classes}
   HEADERS ${headers})
+vtk_add_test_mangling(VTK::TestingGenericBridge)
diff --git a/Testing/IOSQL/CMakeLists.txt b/Testing/IOSQL/CMakeLists.txt
index 9b86d0c2b1a5c0e823850fcf9cb398cde10ca9f2..723935b16d6784887989165fe5911bb33908d372 100644
--- a/Testing/IOSQL/CMakeLists.txt
+++ b/Testing/IOSQL/CMakeLists.txt
@@ -3,3 +3,4 @@ set(classes
 
 vtk_module_add_module(VTK::TestingIOSQL
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::TestingIOSQL)
diff --git a/Testing/Rendering/CMakeLists.txt b/Testing/Rendering/CMakeLists.txt
index 41a5689f2a24666f28d8e9b50001b392dc50ad7e..c397d0b869162090df39bea4ec447ca9b509adc6 100644
--- a/Testing/Rendering/CMakeLists.txt
+++ b/Testing/Rendering/CMakeLists.txt
@@ -13,3 +13,4 @@ vtk_module_add_module(VTK::TestingRendering
   CLASSES ${classes}
   HEADERS ${headers}
   NOWRAP_HEADERS ${nowrap_headers})
+vtk_add_test_mangling(VTK::TestingRendering)
diff --git a/Views/Context2D/CMakeLists.txt b/Views/Context2D/CMakeLists.txt
index d00681f4956eb42c53efaaf613081845ec3a7093..27787312c6e68406578a2624e84606f0cf776b7e 100644
--- a/Views/Context2D/CMakeLists.txt
+++ b/Views/Context2D/CMakeLists.txt
@@ -5,3 +5,4 @@ set(classes
 
 vtk_module_add_module(VTK::ViewsContext2D
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ViewsContext2D)
diff --git a/Views/Core/CMakeLists.txt b/Views/Core/CMakeLists.txt
index 8456ec4b186c0cabc3e0acca1f7e05b5dadb8d61..e9edbd6b256cccd32531835daec759e14d58ddf0 100644
--- a/Views/Core/CMakeLists.txt
+++ b/Views/Core/CMakeLists.txt
@@ -9,3 +9,4 @@ set(classes
 
 vtk_module_add_module(VTK::ViewsCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ViewsCore)
diff --git a/Views/Infovis/CMakeLists.txt b/Views/Infovis/CMakeLists.txt
index 67f8201a486a769e641f97c82ff2c0f357033168..d465cbc65acf7d7d0c649802b59ebc497f8c61b7 100644
--- a/Views/Infovis/CMakeLists.txt
+++ b/Views/Infovis/CMakeLists.txt
@@ -30,3 +30,4 @@ set(classes
 
 vtk_module_add_module(VTK::ViewsInfovis
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::ViewsInfovis)
diff --git a/Views/Qt/CMakeLists.txt b/Views/Qt/CMakeLists.txt
index 787db8ce1b36d1cdce4db65f92668f8378b4fdf6..f8989d8373373b88178f4c86bc902371d26aed74 100644
--- a/Views/Qt/CMakeLists.txt
+++ b/Views/Qt/CMakeLists.txt
@@ -20,3 +20,4 @@ vtk_module_add_module(VTK::ViewsQt
 
 vtk_module_definitions(VTK::ViewsQt PRIVATE QT_NO_KEYWORDS)
 vtk_module_link(VTK::ViewsQt PRIVATE "Qt${vtk_qt_major_version}::Widgets")
+vtk_add_test_mangling(VTK::ViewsQt)
diff --git a/Web/Core/CMakeLists.txt b/Web/Core/CMakeLists.txt
index e34ea43aa8c64493bb7132f866764db31f66766a..244ddbab8f0bb295c718051ce210db4b1aa172ca 100644
--- a/Web/Core/CMakeLists.txt
+++ b/Web/Core/CMakeLists.txt
@@ -7,3 +7,4 @@ set(classes
 
 vtk_module_add_module(VTK::WebCore
   CLASSES ${classes})
+vtk_add_test_mangling(VTK::WebCore)
diff --git a/Web/WebGLExporter/CMakeLists.txt b/Web/WebGLExporter/CMakeLists.txt
index d913c1ac024a6083adb08ac0801b2a8343e95492..92e778d34b69c4cc3495a6b041e1d52dc3ecf6cf 100644
--- a/Web/WebGLExporter/CMakeLists.txt
+++ b/Web/WebGLExporter/CMakeLists.txt
@@ -37,3 +37,4 @@ vtk_module_add_module(VTK::WebGLExporter
   CLASSES ${classes}
   SOURCES ${sources}
   PRIVATE_HEADERS ${private_headers})
+vtk_add_test_mangling(VTK::WebGLExporter)
diff --git a/Wrapping/PythonCore/CMakeLists.txt b/Wrapping/PythonCore/CMakeLists.txt
index 1cdac943b529006aa7e00843ca282d6b9de822b9..a54113cdfbbcc0cf57f1fba3e46e12bb6005dd28 100644
--- a/Wrapping/PythonCore/CMakeLists.txt
+++ b/Wrapping/PythonCore/CMakeLists.txt
@@ -32,3 +32,18 @@ vtk_module_add_module(VTK::WrappingPythonCore
   PRIVATE_CLASSES ${private_classes}
   PRIVATE_HEADERS ${private_headers}
   LIBRARY_NAME_SUFFIX "${vtk_python_version_major}.${vtk_python_version_minor}")
+vtk_add_test_mangling(VTK::WrappingPythonCore
+  EXEMPTIONS
+    PyVTKEnum_
+    PyVTKAddFile_
+    PyVTKNamespace_
+    PyVTKClass_
+    PyVTKObject_
+    PyVTKSpecialObject_
+    PyVTKSpecialType_
+    PyVTKTemplate_
+    PyVTKMethodDescriptor_
+    PyVTKNumberReference_
+    PyVTKReference_
+    PyVTKStringReference_
+    PyVTKTupleReference_)