-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add support for depend tag #43
Conversation
👍 |
+1 patch looks good, we need to update REP 127 accordingly |
+1 I am willing to update REP-0127, if desired. Will this change apply to Hydro only, or to Groovy as well? |
catkin_pkg is cross ROS distro - so it must apply to Groovy as well. |
OK. I don't see any problem with that, Dirk, but I needed to know for documentation purposes. |
👍 |
1 similar comment
👍 |
While discussing the catkin documentation update (ros/catkin#429), I asked if we should simplify the docs by recommending the use of Dirk responded:
Is that still your thinking, William? If we don't want people to use |
I think it should go like this: Use whenever you have both <build_depend> and <run_depend> -j On Thu, May 30, 2013 at 10:53 AM, jack-oquin notifications@gh.neting.ccwrote:
Jonathan Bohren |
Or alternatively: Use . If you need more granular control and know what you're doing, -j On Thu, May 30, 2013 at 11:07 AM, Jonathan Bohren <jonathan.bohren@gmail.com
Jonathan Bohren |
From a documentation perspective, defining "where appropriate" is hard. You have to start with a discussion of the fact that William and Dirk must have explained the transitive dependency problem to me many times. I still didn't understand it, until after I tried to document it and got it all mixed up. The main potential simplification is to recommend |
Recommending to blindly use I think the tutorials should describe the And after that it should be mentioned that dependencies listed as both can be written more efficiently as @jbohren mentioned above:
|
Like I said before, whether it is the |
Thanks for the feedback. I think I understand. We want the docs to describe "best practices", or at least "good practices". For some tasks, it really does get simpler.
But, other tasks remain complicated:
|
I do think that the decision guidance can describe the stuff in such a detail that the user can easily follow it. They should be able to check against a list of bullet points what matches there scenario and derive the right way to define the dependency based on that. For example:
Higher level rules can that nicely be derived from that and argued for. E.g. message packages match bullets 1 and (usually) 2 for |
That looks like a good policy, to me, and then point out that if you need
|
Thanks, Dirk, for that helpful list of decision factors. While they probably cover at least 2*sigma of the probability distribution, I am pretty sure there are exceptions not covered by those rules. I suppose the real underlying rules were dictated by implementation concerns:
|
if there are cases left which are not addressed by the bullets I put together out of my head than we should add them as soon as we recognize them. I don't think that there are any "magic cases" - they should be all straight forward logic decisions (even if the reason is not clear for the average user - thats why we want that list in the first place). |
Well at some point the dependencies from package.xml must be utilized in the process of building the (Debian) package and installing it. If anyone can propose an alternative we are always open to hear that. But until now nobody ever proposed an alternative (except naming these two differently). If we want to split them into more semantic dependencies in order to use them in CMake automatically I would also like to discuss options in that direction. This is the major thing I am worried about when adding |
There were several proposals. Mine was to separate That never went anywhere. What's the point when we have no clear road-map for creating separate binary and devel packages, except by hand? It is just not a big priority. Most things should not be designed before the problem is understood in adequate detail. Prototyping is good for that, but only if there is sufficient urgency. |
On Fri, May 31, 2013 at 1:29 PM, Dirk Thomas notifications@gh.neting.ccwrote:
I understand this concern, but frankly, the majority of ROS packages that |
Imo it is always hitting you back if you make design / spec decision without having a clear perspective where you wanna go. So even if it is not a priority to implement a feature you should have a clear vision on how that should look like. @jbohren catkin and the dependencies in the package.xml can not only target the research environment. It must deal with these difficult dependency question since there is a strong request towards having first-class Debian (and other) packages at some point in the future. The difficult task will be to address this need will still keeping it easy enough for the research environment. Regarding the |
Dirk: I think we both did that already. It went nowhere, which may have been appropriate. I've got more productive things to do than make detailed proposals we are not likely to implement. For example, I can keep trying to document the design we already implemented and deployed. |
After searching again I only find these references to That describes only that there should be a separate tag for "-dev" run dependencies. It does not go into any details: does it mean it requires a dependency to be specified twice (one run_depend on the non-dev package, one devel_depend on the dev package), what does it mean for something like installing all dependencies in order to build a package in rosdep and the buildfarm?. Please point me to further information if I just can't find them in the large set of mailing lists and issue trackers. Regarding the "mutually-exclusive tag" mentioned here: https://groups.google.com/d/msg/ros-sig-buildsystem/wbQZg_Y0igY/DibqLhi0DrUJ It described that the four tags "build_depend", "run_depend", test_depend" and "depend" should be mutually exclusive. What exactly is the difference between that and this pending pull request adding the depend tag? Without any further explanation I just can't understand it. So if anyone has an interest of figuring out alternative than he need to provide more information and details so that others can contribute to the discussion and make progress on the topic. |
On Fri, May 31, 2013 at 6:03 PM, Dirk Thomas notifications@github.com wrote:
No, it described the following, if you read the original message [1], and it's a pretty simple concept:
[1] https://groups.google.com/d/msg/ros-sig-buildsystem/wbQZg_Y0igY/_7ionDPHzhwJ |
Thanks for clarifying your proposal. That maps to exactly what we do have with the In the discussion we had the argument (fro multiple people) that none of the terms (neither the current one nor your proposed renamed ones) cover exactly the semantic of the dependencies. Dependencies listed as I am not even sure if it is possible to find a term which would make the semantic crystal clear without any further documentation. |
The point isn't just to rename them, it's to enforce that any dependency is Regardless, I don't know if this is the best way to do it, but don't say Furthermore, I'm not going to spend my time building a fully fleshed out |
With this PR we do have the four tags you mentioned: The only case where it is not possible to enforce exclusive tags currently is That makes it look like what your proposal is about or are there any other aspects I haven't considered? |
This is why I proposed tags with different names since they would have different meaning and could be introduced slowly and since we were already discussing making the nomenclature clearer to new users. Regardless, like I said before, this PR looks good, thank you. |
I see no advantage to deprecating the most common current usage, which is both Unfortunately, if we accept that they are not mutually exclusive, the main point of Jon's proposal is lost. I guess I'm OK with that, I don't consider the various types of dependencies logically exclusive, anyway. A package can depend on another for multiple reasons. My suggestion (I won't call it a proposal) had no mutual exclusion. Rather, it characterized each major type of dependency according when and where it comes into play.
With this approach, some tags logically imply others. Using
|
Thank you, Jack, for the detailed description. I will try to understand it and the consequences before considering to merge this pull request because I think sketching how we could do the dev/non-dev stuff will help us to make a better decision on the |
While I am always reluctant to design features for things we may never do, I think there is some merit to giving official names to Having them defined makes it easier to document what happens, so users can understand it better. Even if we never implement separate binary and devel packages, I would prefer to describe my own dependencies in that form, anyway, because it just seems clearer. |
First draft of a REP-0127 update available. |
Perhaps a summary of the lengthy Opinions? |
We made a consensus decision to always recommend Python code generally only requires a Any objections? |
Superseded by #88. |
It is not exposed in the API but will be handled as a build_depend and run_depend after parsing.