Regression in object factory autoinit registration in VTK 9.0.1 (works fine in VTK 8.2.0)
I'm trying to run itk-snap 3.8.0 (http://www.itksnap.org/pmwiki/pmwiki.php) with VTK 9.0.1, and it crashes. It looks like it vtkPolyDataMapper2D::New() returns nullptr even while libvtkRenderingOpenGL2-9.0.so is linked. It's regrettion: with VTK 8.2.0 it worked fine.
On further inspection, it looks like function vtkRenderingOpenGL2_AutoInit_Construct() is never called, never registering corresponding classes in factory.
Here's corresponding part of build log:
cd /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/OpenGL2 && /usr/bin/c++ -DRenderingOpenGL2_EXPORTS -DVTK_IN_VTK -DvtkRenderingCore_AUTOINIT_INCLUDE="/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/CMakeFiles/vtkModuleAutoInit_4e7408e0d020c0bc0cc5c2b2e46c90a4.h" -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/OpenGL2 -I/usr/src/RPM/BUILD/vtk-9.0.1/Rendering/OpenGL2 -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/DataModel -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/DataModel -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/Math -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/Math -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/Transforms -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/Transforms -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/Rendering/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/ExecutionModel -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/ExecutionModel -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Filters/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/Filters/Core -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/Misc -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/Misc -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/UI -I/usr/src/RPM/BUILD/vtk-9.0.1/Rendering/UI -I/usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Common/System -I/usr/src/RPM/BUILD/vtk-9.0.1/Common/System -isystem /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Utilities/KWIML -isystem /usr/src/RPM/BUILD/vtk-9.0.1/Utilities/KWIML -isystem /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Utilities/KWSys -isystem /usr/src/RPM/BUILD/vtk-9.0.1/Utilities/KWSys -isystem /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/ThirdParty/glew -isystem /usr/src/RPM/BUILD/vtk-9.0.1/ThirdParty/glew -pipe -frecord-gcc-switches -Wall -g -O2 -I/usr/include/gsl -DHAVE_SYS_TIME_H -DHAVE_SYS_TYPES_H -DHAVE_SYS_SOCKET_H -D__USE_LARGEFILE64 -DH5_HAVE_SIGSETJMP -D__USE_POSIX -DH5_HAVE_SETJMP_H -g -Wnon-virtual-dtor -Wno-long-long -ansi -Wcast-align -Wchar-subscripts -Wall -Wextra -Wpointer-arith -Wformat-security -Woverloaded-virtual -Wshadow -Wunused-parameter -fno-check-new -fno-common -Werror=undef -Werror=return-type -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -o CMakeFiles/RenderingOpenGL2.dir/vtkRenderingOpenGL2ObjectFactory.cxx.o -c /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/OpenGL2/vtkRenderingOpenGL2ObjectFactory.cxx
And here are files:
$ cat /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/Rendering/OpenGL2/vtkRenderingOpenGL2Module.h
#ifndef VTKRENDERINGOPENGL2_EXPORT_H
#define VTKRENDERINGOPENGL2_EXPORT_H
#ifdef VTKRENDERINGOPENGL2_STATIC_DEFINE
# define VTKRENDERINGOPENGL2_EXPORT
# define VTKRENDERINGOPENGL2_NO_EXPORT
#else
# ifndef VTKRENDERINGOPENGL2_EXPORT
# ifdef RenderingOpenGL2_EXPORTS
/* We are building this library */
# define VTKRENDERINGOPENGL2_EXPORT __attribute__((visibility("default")))
# else
/* We are using this library */
# define VTKRENDERINGOPENGL2_EXPORT __attribute__((visibility("default")))
# endif
# endif
# ifndef VTKRENDERINGOPENGL2_NO_EXPORT
# define VTKRENDERINGOPENGL2_NO_EXPORT __attribute__((visibility("hidden")))
# endif
#endif
#ifndef VTKRENDERINGOPENGL2_DEPRECATED
# define VTKRENDERINGOPENGL2_DEPRECATED __attribute__ ((__deprecated__))
#endif
#ifndef VTKRENDERINGOPENGL2_DEPRECATED_EXPORT
# define VTKRENDERINGOPENGL2_DEPRECATED_EXPORT VTKRENDERINGOPENGL2_EXPORT VTKRENDERINGOPENGL2_DEPRECATED
#endif
#ifndef VTKRENDERINGOPENGL2_DEPRECATED_NO_EXPORT
# define VTKRENDERINGOPENGL2_DEPRECATED_NO_EXPORT VTKRENDERINGOPENGL2_NO_EXPORT VTKRENDERINGOPENGL2_DEPRECATED
#endif
#if 0 /* DEFINE_NO_DEPRECATED */
# ifndef VTKRENDERINGOPENGL2_NO_DEPRECATED
# define VTKRENDERINGOPENGL2_NO_DEPRECATED
# endif
#endif
/* AutoInit dependencies. */
#include "vtkRenderingCoreModule.h"
#include "vtkRenderingUIModule.h"
/* AutoInit implementations. */
#ifdef vtkRenderingOpenGL2_AUTOINIT_INCLUDE
#include vtkRenderingOpenGL2_AUTOINIT_INCLUDE
#endif
#ifdef vtkRenderingOpenGL2_AUTOINIT
#include "vtkAutoInit.h"
VTK_MODULE_AUTOINIT(vtkRenderingOpenGL2)
#endif
#endif /* VTKRENDERINGOPENGL2_EXPORT_H */
$ cat /usr/src/RPM/BUILD/vtk-9.0.1/BUILD/CMakeFiles/vtkModuleAutoInit_4e7408e0d020c0bc0cc5c2b2e46c90a4.h
#define vtkRenderingCore_AUTOINIT 1(vtkRenderingUI)
It looks like file vtkRenderingOpenGL2Module.h expects to have vtkRenderingOpenGL2_AUTOINIT_INCLUDE and vtkRenderingOpenGL2_AUTOINIT defined, but during build vtkRenderingCore_AUTOINIT_INCLUDE is defined, and it points to file defining vtkRenderingCore_AUTOINIT.