1# This file provides several helper macros/functions to aid in overrideing
2# the VTK object factories. These methods should be used to ensure that certain
3# interface classes have valid overrides provided in implementation modules.
4# If the interface class doesn't use one of the object factory based new macros
5# in C++ then the overrides will not work as expected.
6
7# Add a new override, base is the base class name and override is the name of
8# the class that should override. For example,
9# vtk_add_override(vtkRenderer vtkOpenGLRenderer)
10macro(vtk_add_override base override)
11  list(APPEND vtk_module_overrides ${base})
12  set(vtk_module_${base}_override ${override})
13endmacro()
14
15# Create the relevant object factory files from the override list. This uses
16# ${vtk-module} to construct the file names (${vtk-module}ObjectFactory.[h,cxx]
17# in the current binary directory.
18function(vtk_object_factory_configure override_list)
19  # Now we iterate and create that class file...
20  foreach(_class ${override_list})
21    set(_override ${vtk_module_${_class}_override})
22    set(_vtk_override_includes
23      "${_vtk_override_includes}\n#include \"${_override}.h\"")
24    set(_vtk_override_creates "${_vtk_override_creates}
25  VTK_CREATE_CREATE_FUNCTION(${_override})")
26    set(_vtk_override_do "${_vtk_override_do}
27    this->RegisterOverride(\"${_class}\",
28                           \"${_override}\",
29                           \"Override for ${vtk-module} module\", 1,
30                           vtkObjectFactoryCreate${_override});")
31  endforeach()
32  string(TOUPPER ${vtk-module} VTK-MODULE)
33  configure_file(${VTK_CMAKE_DIR}/vtkObjectFactory.h.in
34    ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}ObjectFactory.h)
35  configure_file(${VTK_CMAKE_DIR}/vtkObjectFactory.cxx.in
36    ${CMAKE_CURRENT_BINARY_DIR}/${vtk-module}ObjectFactory.cxx)
37endfunction()
38