YARP Cleanup

From Wiki for iCub and Friends
Jump to: navigation, search

This is a list of issues that are required and/or desirable in order to cleanup YARP, and to make it easier to package, and appealing for other


General

  • Create yarp-devel mailing list and mail to the rc-hackers mailing list

CMake 2.6.0

  • [Required] At the moment YARP is not compiling with cmake 2.6.0, but officially we are supporting it. Moreover internally it searches for cmake 2.6.4. My suggestion is to procede in this way:
    • Fix the actual issue with cmake 2.6.0.
    • Release 2.3.20.
    • Write a mail to the mailing list about the new policies for supported debian/ubuntu releases.
    • Add a wiki page for supported versions.
    • Check if the build machines for the new policy are available and eventually add them.
    • Create 2.3 stable branch and start development of 2.4 series in trunk.
    • Bump cmake version to 2.6.4.
    • Cleanup and remove all workarounds for cmake 2.6.0.
    • Ensure that everywhere 2.6.4 is required (in all code and documentation).
    • Ensure that after those changes, YARP actually builds with cmake 2.6.4 (check the dashboard)

FindXXX

  • [Recommended] Fix all the FindXXX.cmake files dropping compatibility, according to CMake_Modules_Guidelines
  • [Recommended] Remove ACE4YARP
  • [Recommended] Use FeatureSummary and replace the YARP_USE_XXX and YARP_SKIP_ACE with HAVE_XXX
  • [Optional] Investigate if FindGtk shipped with cmake can be used instead of our
  • [Required] Mail to the mailing lists about those changes.

Dependency Issues

If you link libYARP_os, you don't need to link directly to ACE, unless you are using it directly in your code. So the aim here is to fix wherever libraries not needed are linked, in order to reduce the dependencies needed for debian packages (in this case you don't need the libace-dev package containing the libACE.so file)

  • [Recommended] Use LINK_PRIVATE in order not to link unneeded packages.
  • [Recommended] Create and export variables YARP_OS_LIBRARY, and use them instead of YARP_LIBRARIES
  • [Recommended] Ensure that all packages are linked internally using only the required packages and not using YARP_LIBRARIES
  • [Required] Mail to the mailing lists about those changes.

Plugin framework

Current plugin framework has several issues with dependencies. The solution would be to have plugins that are loaded dynamically and not linked statically (RUNTIME option is still not a solution because if one .so file is deleted, the library crashes, therefore the dependencies are still the same).

  • [Desirable] Rewrite plugin framework that does not require to link everything from every carrier and device. libYARP_init can be dropped if the plugin framework is implemented properly.
  • [Required] Mail to the mailing lists about those changes.

Extern libraries

There are a few issues with extern libraries (i.e. TinyXML) At the moment I don't know how to solve them, the ideal solution would be not to have them in YARP/iCub and have only the FindXXX.cmake for them. But there are 2 problems

  1. Supporting older debian version where some packages are not released (i.e. gtkdataboxmm)
  2. Windows
  • [Recommended] We should have those packages in the yarp debian/ubuntu repository for the version missing
  • [Suggested] We should investigate if it is possible to use CoApp for building YARP packages and its dependencies


API/ABI

  • [Suggested] Constify methods and pass const references whenever possible. For example
    • virtual bool open(Searchable& config) should probably be virtual bool open(const Searchable& config)
    • virtual Bottle& findGroup(const char *key) should probably be virtual const Bottle& findGroup(const char *key) const
  • [Suggested] Run API and ABI checker tools before every release to ensure that API and ABI are stable during the release cycle.
  • [Recommended] Mark methods as deprecated instead of modifying/removing them

Other Optional Cleanup

  • [Suggested] Replace all tabs with spaces and remove trailing spaces
  • [Suggested] Headers should should not require other headers before in order to compile
  • [Suggested] Headers should contain the minimum amount of other headers, using forward declarations where possible.

Unit tests

  • [Desirable] Not all the classes/features in YARP are covered by unit tests, we should add them

Git migration

  • [In my dreams] SVN sucks