[vtk-developers] New module system preview

Elvis Stansvik elvis.stansvik at orexplore.com
Mon Oct 29 13:13:43 EDT 2018


Fantastic work Ben. One question below.

Den mån 29 okt. 2018 17:07Ben Boeckel <ben.boeckel at kitware.com> skrev:

> Hi all,
>
> I've gotten the new module system to a point that I'd like to open up
> testing to other developers. It's not 100% complete (see the known
> issues listing below), but it's pretty close. I'd highly recommend using
> a new build tree for building the branch.
>
> Notes for WIP things on the branch:
>
>   - There's a hard-coded list of "don't build this" in CMakeLists.txt
>     currently just for my convenience. Feel free to edit the
>     `REJECT_MODULES` argument list as needed for your machine(s).
>
> Overview of changes:
>
>   - Instead of `module.cmake`, there are `vtk.module` and `vtk.kit`
>     files. These are basically CMake argument lists, but no variable
>     expansion is allowed. If there are optional dependencies, they must
>     be private dependencies. Optional public dependencies indicate that
>     a new module should be made instead.
>
>   - Modules may now be "rejected" and never built. This turns off
>     *dependent* modules. If a module is required and also has a rejected
>     module as a dependency, an error occurs.
>
>   - Minimum CMake is still 3.3, but kit support requires CMake 3.12+ for
>     object library features.
>
>   - There are no more `vtk_mpi_link` or `vtk_opengl_link` "magic"
>     functions. Instead, just depend on the `VTK::mpi` and `VTK::opengl`
>     modules.
>
>   - Third party modules now declare whether they support external copies
>     or not (i.e., no more useless `VTK_USE_SYSTEM_kwsys` variable). See
>     the `ThirdParty` directory for various examples. Other third parties
>     only support external copies (e.g., `VTK::mpi` and `VTK::opengl`).
>
>   - Imported targets are now preferred for `find_package` callers. Third
>     party packages warn about this usage, but others do not. There is
>     also the `vtk_module_find_package` call which also adds required
>     `find_package` calls to the `vtk-config.cmake` file for external
>     consumers (only necessary when using imported targets).
>
>   - Module names now look like `VTK::CommonCore`. This is a target name
>     which can be used anywhere, within or outside of the VTK source
>     tree. Non-module projects now do:
>
> ```cmake
> # Find VTK.
> find_package(VTK REQUIRED COMPONENTS CommonCore)
> # Make two programs.
> add_executable(myexe1 myexe1.c)
> add_executable(myexe2 myexe2.c)
> # Add include directories, link line, compile definitions, etc.
> # necessary to use VTK::CommonCore.
> target_link_libraries(myexe1 PRIVATE VTK::CommonCore)
> target_link_libraries(myexe2 PRIVATE VTK::CommonCore)
> # Add VTK_AUTOINIT defines to the targets.
> vtk_module_autoinit(TARGETS myexe1 myexe2 MODULES VTK::CommonCore)
>

Can this not be brought in automatically via the target's interface
definitions?

With the current setup, I'm getting them via ${VTK_DEFINITIONS} I think.

Would be nice to avoid the repeated target name.

Elvis

```
>
>   - To add requirements to a module, the module system offers some
>     functions in lieu of CMake's `target_*`. This is in order to
>     properly support kits (the `CommonCore` target is just an
>     `INTERFACE` library in this case and `PRIVATE` link libraries need
>     copied onto the containing kit). The functions:
>     * `vtk_module_compile_options`
>     * `vtk_module_definitions`
>     * `vtk_module_include`
>     * `vtk_module_link`
>     * `vtk_module_link_options` (depends on `target_link_options` in
>       CMake 3.13+)
>
> It is currently based on `master` as of a week ago, but I'll probably
> rebase again this week.
>
> Please file issues found with the branch on my fork of VTK:
>
>     https://gitlab.kitware.com/ben.boeckel/vtk/issues
>
> to make things easier to track. Since Gitlab doesn't support MRs between
> sibling forks (yet), please attach patches to issues if you have a fix.
>
> Known issues:
>
>   - Running generated Java wrappers needs some attention. Missing
>     symbols (from Java code?) happen when running the tests.
>   - Windows support (there are some `:` characters left in filenames
>     yet).
>
> Unimplemented:
>
>   - Remote modules (conceptually the same as before, but there are no
>     remote modules that have been ported right now)
>   - `OPTIONAL_PYTHON_LINK` magic keyword. This can now just be supported
>     in the `VTK::Python` module, but has not been implemented.
>
> Untested:
>
>   - Multi-config generators (e.g., Xcode and Visual Studio).
>   - Mobile device support.
>
> Thanks,
>
> --Ben
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Search the list archives at: http://markmail.org/search/?q=vtk-developers
>
> Follow this link to subscribe/unsubscribe:
> https://public.kitware.com/mailman/listinfo/vtk-developers
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://public.kitware.com/pipermail/vtk-developers/attachments/20181029/95776f8e/attachment-0001.html>


More information about the vtk-developers mailing list