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
[outcome] Replace Outcome single header based port with full fat cmake install port #15603
Conversation
Now that all the CI tests have passed, @PhoebeHui @Pospelove both of you worked on bringing Outcome to vcpkg (thanks for that!). Can I ask that you review this PR, as obviously it'll be a breaking change for you, to make sure it's good? |
LGTM. Good job. |
I will help you to improve these changes later. |
I would love to see the ABI permutation disabled (either by default or by user request via library feature). Installing multiple library versions is prohibited under the vcpkg dependency model and so I think there is little (no?) gain from ABI permutation at the cost of more unreadable symbols. What do you think? EDIT: For those unfamiliar with this library: The library namespace is suffixed with the git commit hash (e.g. |
@BillyONeal what do you think about? |
@ned14 Can you test if my changes is correct? |
As current Outcome does not have a stable ABI until 2022, per-SHA ABI permutation is used to prevent collision between multiple copies of Outcome being brought into the same process. Some libraries may use Outcome from vcpkg, others may use Outcome standalone, still others may use a customised Outcome (there are quite a few forks going around because I refused certain changes, so various people stepped up with forks, and they haven't changed the namespace name). In 2022 it is expected that we shall declare the ABI stable, and from thenceforth it shall be CI tested per commit to ensure it never, ever, changes again. At that point the ABI permutation will be dropped in the stable branch. If Outcome enters vcpkg, I should imagine that as part of the ordinary ports upgrade, vcpkg then gets the ABI stable Outcome. Note that the ABI permute is per git SHA. As vcpkg chooses a specific git SHA, the ABI is not permuted for any given chosen git SHA. |
I've refactored your changes a bit further, see what you think. Some notes:
This isn't useful, the latter find package is not necessary and is confusing, but
|
The reason I separated these two dependencies into two files is to add them as separate ports in the future. So I think it is appropriate to put REF and HASH in the corresponding cmake file.
Yes, I will take the usage file back.
#11758 is adding the feature of the specified version of the dependency of the port. Once it is merged, we can specify the version of byte-lite and gsl-lite. I don't know whether this question can be solved completely.
Yes, vcpkg currently lacks steps to test port validity and compatibility, but in the near future, I hope we can support them. |
I'm not keen on exposing QuickCppLib as a public port. I don't want people to see it and have expectations that they can use it directly. This was one of the major reasons I would not support a vcpkg port of my libraries back in 2017, because it adds support costs to me. If that's vcpkg's intent, think the single header include based port, which you already have, is plenty sufficient as is. I would support QuickCppLib as a vcpkg port if and only if:
Obviously all this is open source, so you guys can do what you want. However maintaining good relations between packagers and devs is important long term. I have good relations with most packagers of my libraries, I do my best to support them, it's a quid pro quo.
Versioning makes package management considerably more complex in general. People think they want versioning, and locally I suppose they do, but to be honest I don't think people generally appreciate the wider problems versioning brings into package management. Python's packaging story has become what it has due to versioning, and they're desperately trying to dig themselves out of that hole now. For me personally, the whole point of bothering with package management is that for some given release X of all the packages, that every package within that release has been confirmed to work well when combined with every other package within that release. Ensuring that is a lot of tedious work, but it's most of the point of Debian or Fedora or any binary packages based Linux distro. I mean, anyone can go make their own Linux distro, but it's all that interoperability validation and testing is where the real value add occurs. For me personally, same applies to a C++ package manager, and if a C++ package manager doesn't supply that, I don't see the point of buying into it for non-toy production software. cpp-pm are currently transitioning to a matrix test configuration, so as each package get updated, they are tested by CI with all the other packages. If an upstream upgrades breaks something downstream, you now have to go fix downstream. This may kill off cpp-pm as they lack full time employees to go do all that donkey work (e.g. tons of stuff depends on OpenSSL, so an OpenSSL upgrade may break lots of other packages in tedious ways), but it's the right engineering choice, in my opinion.
This isn't useful for header only libraries, obviously. Also, I find it frequent that my library source code compiles just fine after an upstream upgrade, but it's the test suite which fails because upstream broke some assumption in my code. I had a nasty recent experience with In other words, I really do think you need to support test suites, and I think you need to throw a ton of Azure pipelines at testing downstream dependencies every time something they depend upon gets PRed. |
@ned14 So, I assume that the current changes are good, right? |
I've fixed the outcome package features so they actually work. If the current set of changes suit you, feel free to merge. |
Already test all features succesfully on |
1. Break out these dependencies into standalone ports: - ned14-internal-quickcpplib - status-code 2. Add port for LLFIO. 3. Add dependency smoke tests for Outcome and LLFIO as per instructions.
…ow ready to merge into vcpkg.
I couldn't get UWP working, so I disabled it. All tests now pass. |
Any news on this? It's been a month now since last update. |
The last time vcpkg support for Outcome was attempted was in 2017, where a disagreement about how it ought to be implemented led to no support. This led to users submitting a single file include based edition of Outcome as a stand in. Given that four years have passed, and both vcpkg and Outcome have considerably matured and become far more popular with users, this PR tries again to make vcpkg's Outcome install based i.e. "full fat".
Every conceivable triplet should be supported. Outcome is very widely used in the C++ ecosystem across some very unusual platforms.
Almost. We do bundle an embedded library quickcpplib. This was already being silently bundled by the single file include edition, because the single file include contains quickcpplib, so in this sense nothing has changed. Quickcpplib is not intended for public usage outside this author's own libraries, and me not wanting it to be publicly usable was one of the primary reasons the 2017 submission of Outcome to vcpkg was not possible.
Related issues: