Skip to content
  • Jean-Christophe Fillion-Robin's avatar
    vtkModuleAPI: Update vtk_module_config to avoid overwriting _module · 04460f5b
    Jean-Christophe Fillion-Robin authored
    This commit prevents the variable "_module" from being overwritten
    in vtk_module_config() after being set in "pv_process_modules()".
    
    In the particular project where the error was investigated, it fixes
    a failure to link the plugin against wslink and wslinkCS.
    
    The pseudo code reported below illustrates the scenario leading to
    the link error:
    
    //-----------------------------
    pv_process_modules()                                          [/path/to/Plugins/<NameOfPlugin>/CMakeLists.txt]
      -> foreach(_module IN LISTS current_module_set_sorted)      [ParaViewPlugins.cmake         :pv_process_modules]
         ############################################################################################################
         # NOTE: _module is set here
         ############################################################################################################
         [...]
         -> vtk_add_cs_wrapping(${_module})                       [ParaViewPlugins.cmake         :pv_process_modules]
           -> vtk_add_cs_wrapping                                 [vtkClientServerWrapping.cmake :vtk_add_cs_wrapping]
              [...]
              -> vtk_module_dep_includes(${module})               [vtkClientServerWrapping.cmake :vtk_add_cs_wrapping]
                -> vtk_module_config( ... )                       [vtlModuleAPI.cmake            :vtk_module_dep_includes]
                #####################################################################################################
                # NOTE: This commit make sure _module is *NOT* overwritten !
                #####################################################################################################
         -> list(APPEND plugin_cs_modules ${_module})             [ParaViewPlugins.cmake         :pv_process_modules]
         -> set (${pv-plugin}_CS_MODULES ${plugin_cs_modules})    [ParaViewPlugins.cmake         :pv_process_modules]
    
    
    # This is the code path leading to the link error
    
    ADD_PARAVIEW_PLUGIN(...)                                      [/path/to/Plugins/<NameOfPlugin>/ParaViewPlugin/CMakeLists.txt]
      -> if (pv-plugin AND ${pv-plugin}_CS_MODULES)               [ParaViewPlugins.cmake         :ADD_PARAVIEW_PLUGIN]
        -> foreach(module ${${pv-plugin}_CS_MODULES})             [ParaViewPlugins.cmake         :ADD_PARAVIEW_PLUGIN]
        [...]
          -> list(APPEND extradependencies ${module} ${module}CS) [ParaViewPlugins.cmake         :ADD_PARAVIEW_PLUGIN]
    
      [...]
    
      if (extradependencies)                                      [ParaViewPlugins.cmake         :ADD_PARAVIEW_PLUGIN]
        target_link_libraries(${NAME} LINK_PUBLIC ${extradependencies})
    
      ################################################################################################################
      # NOTE: Without this commit, the plugin was linked either against incorrect libraries or against nonexistent one
      ################################################################################################################
    
    //-----------------------------
    04460f5b