-
Notifications
You must be signed in to change notification settings - Fork 2
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
RFC: Package vcpkg-generated binaries as Chocolatey packages? #2
Comments
This is intended to be only used and consumed by downstream projects and not by upstream vcpkg, but perhaps also @ras0219-msft could be interested in this approach. |
We've definitely considered this approach and deemed it a bit too complex and out-of-scope for now -- if you can make it happen cleanly that would be incredible 😄! Let me lay out some of our reasoning that you might find provocative or useful; apologies in advance for the wall of text!
The conclusion that Vcpkg comes to (regarding all this) is, essentially,
Though it may be obvious, ROS in the "Vcpkg model" would look like:
[1] Defining "effective ABI version" such that "all consumers of X will be satisfied with any binary package that has the same effective ABI version" |
Thanks @ras0219-msft for the great insight behind Just to clarify, my idea on how to use the installer generated by this repo (using the Qt Installer Framework, either online or offline) is quite similar to the "Vcpkg model" that you explained:
The last possibility of having an "update" that is breaking the ABI may seem risky, but typically in systems targeted to developers (such as homebrew), users know that any update in the software will require a complete rebuild of their software. Clearly this system would need to be used only for development, and never for actual deployment in production. Slightly related: I recently found this discussions on the Homebrew issue tracker on how the deal with versions/ABI compatibility, they are definitely an interesting read: Homebrew/brew#60 , Homebrew/brew#620 , Homebrew/brew#1937 . |
@traversaro 👋 the work and writing you've done on the Windows packaging front has been really valuable as we explore packaging ROS 2 for Windows. The Chocolatey packages that you've found in your links [2] and [3] are exploratory and don't necessarily represent the way we plan to package ROS 2 overall. We currently use Chocolatey to install dependencies on our Windows CI build machines so it was natural to try and use it to package additional dependencies as a trial to see how doable generating Chocolatey packages would be. All I mean by the above is that we aren't committed to using Chocolatey, but we have a community that defies the standard "flavors" of package management strategies. Yes we're installing developer libraries and tools, which Chocolatey doesn't necessarily want to handle but we want to provide those as pre-built binaries for a known set of target systems and we already have tooling for comprehensive source builds which works across platforms and is not . Migrating to or replicating all that work with vcpkg doesn't appear to get us any closer to binary packages for Windows which is my chief concern. vcpkg looks like a great tool, but it's looking likely that it's not the right one for ROS 2's needs. |
Thanks @nuclearsandwich for weighing in the discussion!
Good to know, we set up this repo exactly for explore how to package a distribute a big group of Windows library binaries with a lot of interdependences, and until we were going toward the idea of packaging them using the Qt Installer Framework and its online capabilities (http://doc.qt.io/qtinstallerframework/ifw-overview.html). Chocolatey was an interesting alternative for which I was curious to hear opinions.
I am not sure I am getting your point. I know the extensive work done by the ROS community/OSRF on built tools (in the sense defined by ros2/design#115), but as far as I understand all this effort have typically been used to build a huge group of packages with similar build systems (again, in the sense of ros2/design#115), i.e. the one that then are typically packaged using The type of software of which I was thinking are instead the "system dependencies" that are typically installed in Linux using the system package manager or in macOS using Homebrew.
As far as I know, even on ROS, most of these libraries are typically obtained from the system package manager (via |
Thanks for everyone contributing to the discussion! |
Hello all! The vcpkg version 0.0.91 add support for export to QtIFW based installers. See changelog for more info. |
It will definitely be helpful, thanks a lot for the contribution @podsvirov ! |
So can I install |
Hi @sivabudh , sorry but I never noticed your question. I do not think that that is possible, see microsoft/vcpkg#3930 . |
Related to this old discussion, today Microsoft announced the project of porting ROS1 on Windows, https://blogs.windows.com/windowsexperience/2018/09/28/bringing-the-power-of-windows-10-to-the-robot-operating-system/ . I briefly checked the project, and apparently the ros-win developers (I guess @seanyen-msft and @johnsonshih ) had the same problem discussed in this issue, but they choose to deploy their library (mostly C/C++) binary dependencies as Chocolatey packages, see https://ros-win.visualstudio.com/ros-win/_git/rosdep-au-packages . Those packages seems to just contain the |
Unfortunately, MSFT is a big enough place that I haven't talked directly with the team. I will reach out to them though! |
I had missed that, but PR related to the discussion in this issue has been opened against vcpkg back in June: microsoft/vcpkg#6891 . |
Looking into ROS2 effort to package dependency in Windows [1] I noticed that they distribute some of their binary dependencies [2] as
nupkg
Chocolatey packages, that they manually build using the code in [3].I wonder if we could modify the scripts in this repo to package the compiled version of
vcpkg
's libraries as Choco package, so that they could be installed/uninstalled from the chocolatey client. CPack at the moment has no support for generating choco packages [4], andvcpkg
has only a limited support to generate "monolithic" Nuget packages [5, 10], so we will need to roll out our own logic for the vcpkg --> choco packaging. However, as far as I understand it should be as simply as:.nuspec
file from the vcpkg metadata contained in theCONTROL
file (that we already parse in [6] ) and if necessary from a secondary source of metadata.choco pack
to generate the.nupkg
file.This approach would drastically simplify packaging of libraries with a lot of dependecies such as PCL [9], but could present the following challenges/things that need to be properly understood:
vcpkg
currently uses a rolling release model (similar tohomebrew
) but it could be convenient to just produce binary from a specific snapshot/tag ofvcpkg
x86-windows
,x64-windows
,x86-windows-static
,x64-windows-static
?vcpkg-
prefix (or even avcpkg-<something>-
to stress the fact that it is not an officialvcpkg
endeavor) and declare innuspec
metadata (if possible) the incompatibility with this upstream packages.cc @drdanz @j-rivero
[1] : https://github.com/ros2/ros2/wiki/Windows-Install-Binary
[2] : https://github.com/ros2/choco-packages/releases/latest
[3] : https://github.com/ros2/choco-packages
[4] : chocolatey/choco#655
[5] : microsoft/vcpkg#1035
[6] : https://github.com/traversaro/vcpkg-binary-installer-generator/blob/master/CMakeLists.txt#L97
[7] : https://chocolatey.org/packages/boost-msvc-12
[8] : https://chocolatey.org/packages/OpenCV
[9] : ros2/choco-packages#1
[10] : https://blogs.msdn.microsoft.com/vcblog/2017/05/03/vcpkg-introducing-export-command/
The text was updated successfully, but these errors were encountered: