ABI pinning via SONAME in build string#48
ABI pinning via SONAME in build string#48carterbox wants to merge 9 commits intoconda-forge:mainfrom
Conversation
Co-authored-by: Dominik Kutra <k-dominik@users.noreply.github.com>
|
I'm not sure where I should report this bug but it seems related conda-forge/hdf5-feedstock#177 (comment) |
|
@hmaarrfk, that lint error has a patch in PR already (but it has not been merged). After the patch the lint will be unaffected by wider use of pinnings with build string matches. |
|
Why not go with the prior art, which is to have a |
| ### Adding ABI name to package name | ||
|
|
||
| This alternatives renames outputs to `{{ name|lower }}{{ so_major_version }}`. | ||
| This is not backward compatible and would require migrating all downstream | ||
| packages to the new output names. |
There was a problem hiding this comment.
Why not go with the prior art, which is to have a libgfortran5 output? This is what every other binary distro does.
I have addressed this in the Alternatives section. It is also discussed in one of the linked issues: conda-forge/conda-forge.github.io#157
An upside to this approach which I have added is that you can install multiple versions simultaneously.
| This is not backward compatible and would require migrating all downstream | ||
| packages to the new output names. However, it does enable installing multiple |
There was a problem hiding this comment.
This is not true. There's a {{ name|lower }} output too, so it is backwards compatible. Please see https://github.com/conda-forge/ctng-compilers-feedstock/blob/main/recipe/meta.yaml
There was a problem hiding this comment.
That's a good point! I'll update this section with a better description and example using your suggestion.
There was a problem hiding this comment.
I have added a more detailed example of this alternative. I think it is the best alternative. I assume that its major utility is that it allows for multiple ABIs of a library to be installed into the same environment. Judging whether this is an important feature for conda-forge is beyond my depth.
I prefer the build string approach because it is simpler and because I haven't run into a case when I wanted to install multiple versions of the same library. However, this is just my personal experience.
There was a problem hiding this comment.
Allowing multiple ABI versions of a package simultaneously causes much more work for refactoring a recipe in order to prevent clobbering. I have updated the proposal to better show how splitting a recipe this way would work.
There was a problem hiding this comment.
Related thought: The purpose of the global conda-forge-pinnings/migrations is to keep all packages in sync with respect to the ABI/API of popular packages. Since publishing ABI-in-the-name packages allows installing multiple ABIs of the same package, does that mean that global conda-forge-pinnings would no longer be needed?
If so, which is easier? Maintaining global pinnings or maintaining individual feedstocks to ensure that ABI-in-the-name packages are implemented (correctly).
There was a problem hiding this comment.
I'm not suggesting we do multiple ABIs at the same time. We have both libgfortran and libgfortran5 as run_exports and if a person really wants multiple ABIs, they can do that, but that's not the default. Because both libgfortran and libgfortran5 are dependencies, you can only have one package.
|
https://github.com/conda-forge/libidn11-feedstock/blob/main/recipe/meta.yaml (Another package that uses SONAME in an new output) |
|
I think i would like to see conda-forge/abseil-cpp-feedstock#46 resolved before moving more pinnings to conda build strings. It seems that this would exacerbate the issue |
I didn't anticipate that conda was unprepared to do complex matching in the build string. We could end up with some very long build strings: which various packages in the same environment could try to match in different ways: And apparently the conda solver is not equipped to resolve these patterns right now. |
It will be, as soon conda/conda#11612 is merged (and then percolates into the ecosystem). |
|
Closing in favor of #61 |
Checklist
0(if the version changed)conda-smithy(Use the phrase@conda-forge-admin, please rerenderin a comment in this PR for automated rerendering)NOTES:
https://www.debian.org/doc/debian-policy/ch-sharedlibs.html
conda-forge/conda-forge.github.io#157