-
Notifications
You must be signed in to change notification settings - Fork 2.6k
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
Revert "pybind11_catkin: 2.2.3-0 in 'melodic/distribution.yaml' [bloom]" #18473
Conversation
Does it actually conflict? We have everything namespaced underneath |
If you can provide an audit of all the resources and show that if a package depends on this and the system version there won't be any conflict then we can consider it. Looking inside the debian's include directory it looks like all the same headers. And that means if this package is added to your include path you will get this version of the headers and not the system version, which on first blush suggests that it will conflict quite quickly. But in general our policy is not to duplicate things installed on the system. It rarely works out well. In the short run things can often be made to work, but as time goes on you can end up boxing yourself into a corner quite effectively and it ends up being much more work to dig out. If others have taken the time and effort to package something and qa and test it across a large range of systems, we should leverage their work. |
Hi @tfoote, What can we do to get this into Melodic as well beyond just an CMake-overlay on the system package. E.g., perhaps adding a configure check whether the system path is defined on include of pybind11_catkin and throwing an error on configure. Keep in mind, users would have to include both Thank you very much :-) |
I understand that there are new features that we'd like to use. Everything actively under development usually has a new feature that we'd like to use. But if we override the version of pybind11 we will potentially break anyone on the system who is independently using pybind11. Pushing forward is great, and if we were completely our own distro we would be able to move much more quickly and pull everything in sooner. However as we're a small part of a larger ecosystem part of our role is to work with the rest of the ecosystem and that includes using the versions of packages that are already packages. As of the time of feature freeze for bionic pybind11 2.2 had not passed through their QA process to be vetted to be added to the release so it's still on 2.0.x For the next release Cosmic it's been vetted and 2.2.3 is packages and available. Also it's in Buster so looking forward it's all there we just have to be patient until the supported platforms make it available. As mentioned above we can add it but it must be setup to not interfere with the system version to not break anyone else who's expecting the system version. It's a lot of effort to package up a non-conflicting version. But the difference is that doing so puts the cost of the change on the people who opt in. If you conflict or override the system version, it's a classic case of externalities where you don't know who you will break, and they won't know that it's your change that broke their software without significant debugging, but things just work better for you. |
Hi @tfoote,
As can be seen - none are installed outside of the package's scope or override a system-version. We'd like to get the impact assessed (we believe none as we aren't overriding system versions) and Thanks, |
The simple test is that a package working with the system pybind11 won't be effected by depending on another package that uses this package. With the header files in a different location they won't collide immediately, but any package that depends on pybind11_catkin will extend the catkin_INCLUDE_DIRS to include install/include/pybind11_catkin which now will cause the newer headers to appear on the path potentially breaking the application that was previously working based on the system pybind11 version. You can play games with the include directories being explicitly added but to really fix this you need to rename the headers so they don't collide. Otherwise if you think about a case where an intermediate package is using the new headers in their header the new headers must be on their exported path and will collide. And in that case you actually have to change the symbols too. For if my package C with your package B that depends on pybind11_catkin. If I add a dependency on B's headers that use symbols from pybind11_catkin but I am following the API from the system pybind11 either B or C will fail to compile because it depends on the order in the path as to which version of pybind11 will be found. Or alternatively you will get everything as multiply defined because the |
That is already done by pybind11 for GCC. |
@tfoote: We have now addressed this by: (a) Not exporting an altered include path. Our special macro appends include_directories locally, where necessary. This macro is distinct from the upstream macro. Is there anything else left todo? |
Ping @tfoote - is there anything else left to do or are we good to PR Melodic in? |
If you're confident that both can run in parallel now we can go ahead and re-release it. A small test package which demonstrates them working side by side would be great to see just to confirm and also to be able to use as a canary in case there are potential future issues. The biggest risk of these sort of conflicts is that it will bite people way downstream who aren't well equipped for debugging this sort of issue and won't have a clue what's causing it. |
Reverts #18471
Reverting pybind11_catkin from melodic due to installing a conflicting version of pybind11 which is upstream as of artful
@wxmerkt
We talked about in #18282 (comment) we can do the extra cmake-modules only but this appears to have the full implementation installed.