[Cmake] cmVTKWrapTclCommand : the VTK Tk Widgets problem/suggestion

Sebastien BARRE sebastien at barre.nom.fr
Tue May 22 10:18:09 EDT 2001


At 13/05/2001 03:05, Sebastien BARRE wrote:

No answers, then I'll implement this one :

>   VTK_WRAP_TCL(vtkRenderingTCL
>                SOURCES
>                RenderingTCL_SRCS
>                Rendering_SRCS
>                RenderingOpenGL_SRCS
>                COMMANDS
>                vtkTkRenderWidget
>                vtkTkImageViewerWidget
>                vtkTkImageWindowWidget)

i.e.

VTK_WRAP_TCL(resultingLibraryName [SOURCES] SourceListName SourceLists ... 
[COMMANDS CommandName...])

No problem ?
OK then.

>Hi
>
>Yes, it's related to the compilation of the new VTK tree on Windows, but 
>it merely a CMake issue.
>
>I've compiled the new VTK tree, as well as its TCL bindings. The Tcl 
>examples scripts run fine... well, not so fine, there is a problem with 
>the way they exit (they don't exit, the render window can not be closed 
>except by killing the process). The reason : these lines in 
>$(BIN)/Rendering/vtkRenderTCLInit.cxx are just missing :
>
>#include "vtkWin32RenderWindowInteractor.h"
>
>int Vtktcl_Init(Tcl_Interp *interp)
>{
>[...]
>   vtkWin32RenderWindowInteractor
>         ::SetClassExitMethod((void (*)(void *))Tcl_Exit, 0);
>}
>
>Of course, in order to run the Tcl examples I had to replace the usual 
>"catch { load vtktcl}" with a more serious solution : "package require 
>VTK". More about that a later day.
>
>Anyway, the examples using the Tk render widgets (vtkTkRenderWidget) don't 
>work. The vtkTkRenderWidget command is not found (all others are).
>
>I've just checked that vtkTkRenderWidget.obj is properly linked in 
>vtkRenderTCL.dll.
>
>Basically, here is what is missing to $(BIN)/Rendering/vtkRenderTCLInit.cxx :
>
>extern "C" {int VTK_EXPORT Vtktkrenderwidget_Init(Tcl_Interp *interp);}
>extern "C" {int VTK_EXPORT Vtktkimageviewerwidget_Init(Tcl_Interp *interp);}
>extern "C" {int VTK_EXPORT Vtktkimagewindowwidget_Init(Tcl_Interp *interp);}
>
>and
>
>int Vtktcl_Init(Tcl_Interp *interp)
>{
>[...]
>   Vtktkrenderwidget_Init(interp);
>   Vtktkimageviewerwidget_Init(interp);
>   Vtktkimagewindowwidget_Init(interp);
>}
>
>As you see, these lines are used to make the interpreter know about these 
>3 commands, this explains why they are unknown in the current new tree 
>build (I've added them manually to vtkRenderTCLInit.cxx and I checked that 
>it solved the problem). These lines were properly generated in the old 
>tree (in $(BIN_OLD_TREE)/vtktcl/src/vtktcl.cxx file, without the 
>VTK_EXPORT of course), but they were manually generated by Pcmaker (in 
>getclasses.cxx).
>
>How are we going to handle this case in Cmake ?
>
>If you remember correctly (see Rendering/CMakeLists.txt), the Tk Widgets 
>are not part of the wrapped sources, they are included specifically :
>
>IF (VTK_WRAP_TCL)
>   SOURCE_FILES(RenderingTCL_SRCS
>      vtkTkRenderWidget
>      vtkTkImageViewerWidget
>      vtkTkImageWindowWidget)
>[...]
>   VTK_WRAP_TCL(vtkRenderingTCL
>                RenderingTCL_SRCS
>                Rendering_SRCS
>                RenderingOpenGL_SRCS)
>   ADD_LIBRARY(vtkRenderingTCL RenderingTCL_SRCS)
>
>I guess we might need to either introduce a new CMake command or change 
>the VTK_WRAP_TCL command (Ken ?) so that it handles a new parameter type, 
>for ex:
>
>   VTK_WRAP_TCL(vtkRenderingTCL
>                SOURCES
>                RenderingTCL_SRCS
>                Rendering_SRCS
>                RenderingOpenGL_SRCS
>                COMMANDS
>                vtkTkRenderWidget
>                vtkTkImageViewerWidget
>                vtkTkImageWindowWidget)
>
>and this would generate the proper lines...
>
>At the moment I do not know how we are going to include lines like ...
>   vtkWin32RenderWindowInteractor
>         ::SetClassExitMethod((void (*)(void *))Tcl_Exit, 0);
>
>
>_______________________________________________
>Cmake mailing list
>Cmake at public.kitware.com
>http://public.kitware.com/mailman/listinfo/cmake





More information about the CMake mailing list