--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/-9FoB15ixE0J.
For more options, visit https://groups.google.com/groups/opt_out.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Metapackages should not be depended on by other catkin packages as they will not pass along their dependencies' information as they have no find_package infrastructure.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/Z5b5h-8fD-MJ.
Geoff
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-b...@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsy...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
Before discussing if and how package.xml files of metapackages should/can be installed consider the reasons for metapackages in the first place.
Metapackages have only two reasons for existence:
- provide metapackage for dry packages to depend on (therefore metapackages are also allowed to depend on metapackages for bc)
- provide grouping for the Wiki to replace the former stacks
Before discussing if and how package.xml files of metapackages should/can be installed consider the reasons for metapackages in the first place.
Metapackages have only two reasons for existence:
- provide metapackage for dry packages to depend on (therefore metapackages are also allowed to depend on metapackages for bc)
- provide grouping for the Wiki to replace the former stacks
They are not used to be dependent on from normal packages because we do not want this duplicated hierarchy as in the dry world again.
Based on this set there is no need to install the package.xml file of a metapackage.
If you need a package which groups a lot of packages for ease of dependency you should just use a normal package for that.
This package must provide a CMakeLists.txt beside the package.xml file because it is responsible to provide the correct information to downstream packages (i.e. include directories, libraries etc. for find_package() and pkg-config). One example of such a package which just groups several upstream packages is langs (https://github.com/ros/langs) which is therefore not metapackage.
Indeed we should add error messages where appropriate to inform the user if is using it in a way which not intended/supported.
But this is not trivial or even possible in certain situations.
Anyway when building i.e. a local workspace these checks should be added for the checked out code.
- Dirk
On 10.12.2012 10:52, William Woodall wrote:
If you want a package to pass along all of the components in navigation so that your package only has to depend on one thing, then you want an actual package, not a metapackage. This package would
find_package all of the navigation packages and then pass them along using the catkin_package macro. Then anyone find_packaging that package would get everything it specified in the catkin_package macro.
This is often not the case though. Sometimes you really just want to depend on navigation_msgs or some part of a "stack" of related packages. This was previously not possible. For example, If I
needed just the arm_navigation_msgs I had to pull in the entire arm_navigation stack to use it.
--
On Mon, Dec 10, 2012 at 10:46 AM, Geoffrey Biggs <gbi...@killbots.net <mailto:gbi...@killbots.net>> wrote:
On Dec 11, 2012, at 3:39 AM, William Woodall wrote:
> Saying you need it installed is fine, but your packages should depend directly on the packages in navigation not on navigation itself. This maintains the stack/package relationship that
existed before.
This would mean that a package X that requires navigation capability would need to depend on all the individual packages that collectively provide that function. If the metapackage for navigation
changes from using Package A to using Package B for providing some functionality, a change that is not visible to users of the metapackage because the same features are still being provided (e.g.
provided topics), then package X needs to update its dependencies. At this point, an important part of the usefulness of the metapackage becomes questionable.
Geoff
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-buildsystem@googlegroups.com <mailto:ros-sig-buildsystem@googlegroups.com>.
To unsubscribe from this group, send email to ros-sig-buildsystem+unsub...@googlegroups.com <mailto:ros-sig-buildsystem%2Bunsu...@googlegroups.com>.
For more options, visit https://groups.google.com/groups/opt_out.
--
William Woodall
Willow Garage - Software Engineer
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-buildsystem@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsystem+unsub...@googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To post to this group, send email to ros-sig-buildsystem@googlegroups.com.
To unsubscribe from this group, send email to ros-sig-buildsystem+unsub...@googlegroups.com.
On 11 December 2012 04:02, Dirk Thomas <dth...@willowgarage.com> wrote:Before discussing if and how package.xml files of metapackages should/can be installed consider the reasons for metapackages in the first place.
Metapackages have only two reasons for existence:
- provide metapackage for dry packages to depend on (therefore metapackages are also allowed to depend on metapackages for bc)
- provide grouping for the Wiki to replace the former stacks
They are not used to be dependent on from normal packages because we do not want this duplicated hierarchy as in the dry world again.
Based on this set there is no need to install the package.xml file of a metapackage.
If you need a package which groups a lot of packages for ease of dependency you should just use a normal package for that.
This package must provide a CMakeLists.txt beside the package.xml file because it is responsible to provide the correct information to downstream packages (i.e. include directories, libraries etc. for find_package() and pkg-config). One example of such a package which just groups several upstream packages is langs (https://github.com/ros/langs) which is therefore not metapackage.
If you do create a normal package like that, would it fail to provide grouping for the wiki stacks, i.e. do you need to drop the metapackage tag?I'm inclined to agree with geoffrey about the unintuitiveness of it. A metapackage...
- behaves like a metapackage for apt-get
- behaves like a metapackage for the wiki
- does not behave like a metapackage for catkin-cmake
It wouldn't be too hard to fill in most of the cmake magic to do so with a catkin_create_stack wizard template and technical difficulties aside, I can't see any really good reason why it break design/philosophies/etcHaving said all that, I don't think it's all doom and gloom if that behaviour is not there...just unintuitive.
Before discussing if and how package.xml files of metapackages should/can be installed consider the reasons for metapackages in the first place.
Metapackages have only two reasons for existence:
- provide metapackage for dry packages to depend on (therefore metapackages are also allowed to depend on metapackages for bc)
- provide grouping for the Wiki to replace the former stacks
They are not used to be dependent on from normal packages because we do not want this duplicated hierarchy as in the dry world again.
Based on this set there is no need to install the package.xml file of a metapackage.
If you need a package which groups a lot of packages for ease of dependency you should just use a normal package for that.
> To unsubscribe from this group, send email to ros-sig-buildsystem+unsub...@googlegroups.com.
Here are the functionalities I care about:
- provide rosbuild compatibility where stacks are resolved instead to meta-packages (rather than accepting absence of a stack dependency)
- provide the same meta-information of metapackages to tools in installspace as in develspace, instead of losing metapackages halfway.
- rqt_package_graph/rospack/catkin_pkg/catkin_find functions should return the same results
- provide any <export> flag of a metapackage that is available
- same for future tools like reporting errors with a "stack", when user cannot pinpoint exact package, bugtracker/maintainer information
- possibly offer the same dependency wrapping capabilites as used by message_generation and message_runtime packages
I am neither too sure nor passionate about the last one. I guess the question is whether all metapackages should also have a find_package infrastructure so that find_package could be used on a metapackage to get build flags. I just regard message_generation and message_runtime as a special kind of packages that could as well be called metapackages if we changed our view of metapackages slightly (and auto-generated their CMakeLists.txt). The point here is that if users can do that dependency wrapping anyway with normal packages, we might as well provide it with metapackages.
* design goal is to provide grouping of packages
* for each “grouping entity” a Debian package exists to ease installation of a set of packages
* but we do not want plain packages to depend on “grouping entities” (like metapackages and variant)
* why? because this would bloat the dependencies significantly
* therefore “grouping entities” must not provide any further functionality (no header, libraries, scripts, cmake, pkgconfig, exports)
* “grouping entities” should have meta information and they should be available in install space
* “grouping entities” are add-ons and not mandatory to operate
* metapackage provide this grouping for wet, variants provide this grouping for dry (variants do not provide meta information)
* in the future all variants will become metapackages when all underlaying packages have been catkinized
* it is checked and prevented that plain packages depend on metapackages
* try to let rosmake explicitly check for metapackages (as a replacement of former stack dependencies) instead of just ignoring them
Wiki grouping is explicitly not part ob the above consideration. The need for Wiki grouping is not a one-to-one mapping to metapackages.
It should be realized individually to use it not only for these group but flexible for grouping packages of a repo, grouping packages of a release/packaging unit.
This could be achieved with any of the following approaches:
* wiki grouping could be triggered by an export tag (i.e. wiki_group) which will either use all declared run deps [or a subset]
* the export tag could even whitelist the to-be-grouped packages (which would allow more control but be more verbose)
* could be achieved in-the-wiki only (instead if being extracted from meta information)
Which raises a related question: can “grouping entities” depend on “grouping entities”?
On Jan 23, 2013, at 9:54 AM, Dirk Thomas wrote:
> * but we do not want plain packages to depend on “grouping entities” (like metapackages and variant)
> * why? because this would bloat the dependencies significantly
> * therefore “grouping entities” must not provide any further functionality (no header, libraries, scripts, cmake, pkgconfig, exports)
With this requirement, you eliminate the ability of a package to easily require a sub-system. For example, if I have a package that wants the robot to be able to navigate, I would ideally just provide a dependency on the metapackage for the navigation package of my choice (or, in the Gentoo world, I say "something providing navigation must be installed" and portage pulls in the system default one if another is not already available, which may or may not be a metapackage). Instead, I must either make my package depend on every package involved in navigation that it interacts with directly (I'm assuming here that those will pull in the remaining packages based on their own dependencies), which is a problem when that metapackage's contents change without changing the external interface, or I need to make a metapackage for my package so I can set a dependency.
Which raises a related question: can “grouping entities” depend on “grouping entities”?
On Thu, Jan 24, 2013 at 12:57 AM, Geoffrey Biggs <gbi...@killbots.net> wrote:
Which raises a related question: can “grouping entities” depend on “grouping entities”?
If packages CAN'T depend on "grouping entities" but "grouping entities" CAN depend on other "grouping entities" then we're back at rosbuild-type stacks, aren't we?When they were introduced, I thought the point of meta-packages was to have the grouping capabilities of stacks but without creating a parallel dependency tree to the package dependencies (i.e. packages would be able to depend on meta-packages).
On Jan 23, 2013, at 9:54 AM, Dirk Thomas wrote:With this requirement, you eliminate the ability of a package to easily require a sub-system. For example, if I have a package that wants the robot to be able to navigate, I would ideally just provide a dependency on the metapackage for the navigation package of my choice (or, in the Gentoo world, I say "something providing navigation must be installed" and portage pulls in the system default one if another is not already available, which may or may not be a metapackage). Instead, I must either make my package depend on every package involved in navigation that it interacts with directly (I'm assuming here that those will pull in the remaining packages based on their own dependencies), which is a problem when that metapackage's contents change without changing the external interface, or I need to make a metapackage for my package so I can set a dependency.
> * but we do not want plain packages to depend on “grouping entities” (like metapackages and variant)
> * why? because this would bloat the dependencies significantly
> * therefore “grouping entities” must not provide any further functionality (no header, libraries, scripts, cmake, pkgconfig, exports)
Let's pay attention to the solutions provided by various Linux distributions. They have decades of experience packaging tens of thousands of packages.I am speaking below in Debian terms, because it is well-documented and of immediate interest to ROS developers. But, other packaging systems, such as Red Hat and Gentoo, provide similar solutions to meet similar needs.On Wed, Jan 23, 2013 at 11:57 PM, Geoffrey Biggs <gbi...@killbots.net> wrote:On Jan 23, 2013, at 9:54 AM, Dirk Thomas wrote:> * but we do not want plain packages to depend on “grouping entities” (like metapackages and variant)> * why? because this would bloat the dependencies significantly> * therefore “grouping entities” must not provide any further functionality (no header, libraries, scripts, cmake, pkgconfig, exports)With this requirement, you eliminate the ability of a package to easily require a sub-system. For example, if I have a package that wants the robot to be able to navigate, I would ideally just provide a dependency on the metapackage for the navigation package of my choice (or, in the Gentoo world, I say "something providing navigation must be installed" and portage pulls in the system default one if another is not already available, which may or may not be a metapackage). Instead, I must either make my package depend on every package involved in navigation that it interacts with directly (I'm assuming here that those will pull in the remaining packages based on their own dependencies), which is a problem when that metapackage's contents change without changing the external interface, or I need to make a metapackage for my package so I can set a dependency.The Debian solution for generic dependencies is "virtual packages", which are more powerful than our current metapackage discussion. ROS probably needs something similar, so people can provide various alternatives to sub-systems like 2D navigation, where one solution clearly does not meet every need.A virtual package is not physically installed. Instead, some actual package that "Provides" that interface is needed.The ROS community would define the expected attributes of various virtual packages via REPs. Here is the official Debian list:Maybe Groovy metapackages could evolve in this direction.
Otherwise, I don't see much use for metapackages, other than as surrogate dependencies for dry stacks. For most other purposes, an actual package with its own catkin CMakeLists.txt works better.* I can still serve as a documentation node.* It can conveniently be used to compile an entire collection of "component" packages, just as rosmake did for stacks.* It can be also used for collective external dependencies, where appropriate.* It can provide a tick-tock target for compatibility when migrating a package or stack to a different internal organization.* It could "Provide" any appropriate virtual interface, if we choose to follow that example.
So, here are some of the things we discussed in a meeting (Dirk, William and me), with respect to how metapackages shall evolve in the future. This does not yet answer all questions and comments, I realize,so a second round might be necessary next week, but feel free to already comment.
Regarding Virtual Packages, this seems like a valid new feature, but it is orthogonal to the other issues currently mentioned around metapackages. Also the need for this feature seems not that urgent, so unless some volunteer wants to write up a REP, prototype and such, it is not going to happen anytime soon. Anyone might open a ticket so that others may upvote it.
The package.xml for metapackages shall be installed by catkin soon, Dirk volunteered to implement this change.
Some recommendations for how metapackages shall be used in the future (Comments welcome):
- metapackages shall remain the mechanism to generate debian packages that group smaller debian packages
- Variants like ros-base, ros-full, robot, desktop, etc. shall be implemented as metapackages as soon as the packages they point to are catkinized. Those metapackages are to live in some github repo(s). Those would then also get respective wiki pages. The difference between a variant and a metapackage is then technically none, maybe variant could be reserved for groups listed in a REP.
- Other groupings via metapackages are completely up to users,for now no recomendation (except to keep metapackages for rosbuild backward compatibility)
- metapackages may live in any repo, though when they only point to packages in one repo, it makes sense to let the metapackage live there as well.
- wiki pages should continue to show metapackage grouping (as opposed to have a different mechanism for grouping in the wiki)
- the metapackage relationship thus is different from normal package dependencies in that it appears differently in the wiki
- "Related packages" can already be manually entered in the wiki via mere wiki links, currently no further support seem urgent
- wiki pages for packages currently already support the case when a package is pointed to by several metapackages (e.g. http://www.ros.org/wiki/ROS). This can become ugly if many meta-packages exist and overlap, so once we have that, we may need to rethink the wiki layout for this (ideas welcome)
- users may create several metapackages for a single "bunch" of packages, like xyz_core, xyz_full, xyz_experimental,... we currently give no recommendation on bundling and naming
- metapackage manifest information shall only be for the metapackage itself (e.g. maintainer, license)
Open questions / comments (That I intent to raise in the next meeting unless they are resolved here):
- We did not discuss package tags for package lookup, such as used by pypi.
- Why forbid packages to run_depend (not build_depend) on metapackages for convenience, even if we dislike that approach?
- Why not allow declaring multipe groups within the same package.xml of a metapackage? In particular if they share meta-information.
- Should rosmake strictly check stack dependencies against metapackages in the future (one package.xml gets installed)?
- The allowed properties of metapackage's package.xml should be documented.
This has been a long thread, and reading it twice is not much fun, so if you feel I missed something that still should be discussed, it's safer if you comment again.
--
You received this message because you are subscribed to the Google Groups "ROS Buildsystem Special Interest Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-buildsy...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msg/ros-sig-buildsystem/-/9n11pCdEON8J.