-
-
Notifications
You must be signed in to change notification settings - Fork 19
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
Rationale of using vendored fmt #49
Comments
fyi @conda-forge/fmt, as I guess this could be of interest also for fmt mantainers. |
FWIW, I agree that in conda-forge we should try to use the external fmt rather than the embedded one. The only potential issue that needs to be addressed, in my opinion, is that, due to fmt API changes/deprecations, spdlog sometimes does not work properly with the latest fmt. So, I think that perhaps we should have some sort of version pinning mechanism in the spdlog recipe to ensure that spdlog depends on an fmt version known to be compatible with the current spdlog release. |
If I am not wrong, something like what you describe should be already provided by the usual conda-forge ABI migration/pinning system. If we add |
I agree that this would work as a first line of defence. My only concern is that, at least in my experience, the incompatibilities between specific versions of fmt/spdlog can be subtle and hard to detect (e.g., I had one specific case in which compilation would fail only when the spdlog/fmt headers were included in a specific order). So I am a bit hesitant to automatically build spdlog against the latest fmt available (if that is indeed what you are suggesting) and I think a manual pinning in the spdlog recipe would be safer (i.e., just read up in the spdlog docs which specific version of fmt is vendored and pin to the same major version in the spdlog recipe). |
There is already an implicit pinning at the conda-forge level that is propagated to individual packages via automatically generated (but manually merged) PRs, but if you prefer to add some local recipe pinning I do not think it is a problem. |
Perhaps I am just overthinking this, let's just go with the standard conda-forge pinning. We can always add local pinning if issues arise. |
+1 for unvendoring |
I'm seeing some missing symbols related to spdlog, fmt and - strangely - C++11 vs. C++171 in conda-forge/bear-feedstock#23, c.f.
Bear needs to follow [snip details] the ABI of our shared abseil builds, which is C++17, but I'm quite surprised that the C++ standard version has some impact here (outside of abseil, that is). I couldn't see abseil being used in upstream spdlog or fmt. Footnotes
|
I may be wrong, but the problem is that someone is passing a |
Yes it would, because then we'd be compiling all packages that are exposed to the fmt-ABI in a consistent manner, and migrate in a controlled manner from e.g. fmt 8 -> 9. |
I've finally been bitten by incompatibilities between the bundled fmt version in spdlog and conda's fmt package, I've thus opened #50 to attempt de-vendoring fmt. Pinging @traversaro |
I will be closing this issue as fmt is now unvendored. |
Comment:
Hello @conda-forge/spdlog ! I was debugging an issue in downstream code that depended on spdlog but that used fmt, and I noticed that at the moment this package uses the fmt vendored in spdlog, instead of using the external fmt provided by conda-forge. I wanted to ask if there is any reason behind that. Thanks in advance!
I also try to look a bit in the repo history, and I see that the use of the conda-forge fmt was added in #33, but then removed in #35 .
The text was updated successfully, but these errors were encountered: