Opened 2 years ago
Last modified 2 years ago
#65713 assigned defect
libfmt8/libfmt9 change makes libfmt unusable OOB with external software,
Reported by: | Lord-Kamina (Gregorio Litenstein) | Owned by: | mascguy (Christopher Nielsen) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | Cc: | ||
Port: | libfmt libfmt8 libfmt9 |
Description
I have a project that depends on libfmt. Until recently it was working perfectly, but since libfmt
was obsoleted and replaced by libfmt8
and libfmt9
, CMake will no longer find fmt.
This is likely to the fact that the location of the cmake config files changed with these updates.
Change History (9)
comment:1 Changed 2 years ago by ryandesign (Ryan Carsten Schmidt)
Cc: | mascguy added |
---|
comment:2 Changed 2 years ago by Lord-Kamina (Gregorio Litenstein)
comment:3 Changed 2 years ago by mascguy (Christopher Nielsen)
Unfortunately it's extremely problematic if we install headers and libs directly in ${prefix}/include
and ${prefix}/lib
, now that we support multiple versions installed side-by-side. And adding a symlink is going to cause compilation issues for other ports, so you really don't want to do that.
Instead, it's trivial to update projects. You simply need to add the appropriate search path, for the version you want:
- For
pkgconfig
(usually covers CMake too, along with Ninja):${prefix}/lib/libfmtX/pkgconfig
- For pure CMake:
${prefix}/lib/libfmtX/cmake
If you can share info regarding the project you're working with, I can provide guidance specific to it.
comment:4 Changed 2 years ago by mascguy (Christopher Nielsen)
Cc: | mascguy removed |
---|---|
Owner: | set to mascguy |
Status: | new → assigned |
Version: | → 2.7.2 |
comment:5 follow-up: 8 Changed 2 years ago by Lord-Kamina (Gregorio Litenstein)
Version: | 2.7.2 |
---|
I'm not saying you we install headers and libs directly in ${prefix}/include
and ${prefix}/lib
, nor symlinks in there either. Notice how my symlink is just for the cmake configuration files. but there has to be a way to not break cmake detection. I know I could add to CMAKE_PREFIX_PATH
, but when I want to support using macports and homebrew and VS and mingw-w64 on windows and various flavors of Linux, it quickly begins to become unmanageable.
The approach that has been taken essentially negates all benefit derived from fmt including its own cmake config files.
Another possible fix would be to have those files installed in /opt/local/lib/cmake/fmtX
instead of /opt/local/lib/libfmtX/cmake/fmt
comment:6 Changed 2 years ago by mascguy (Christopher Nielsen)
Please point me to the source code for your project, so that I can see what you're working with.
comment:7 Changed 2 years ago by Lord-Kamina (Gregorio Litenstein)
https://github.com/performous/performous/
find_package(fmt REQUIRED CONFIG) target_link_libraries(performous PRIVATE fmt::fmt)
Should work universally; and it used to.
comment:8 follow-up: 9 Changed 2 years ago by mascguy (Christopher Nielsen)
Replying to Lord-Kamina:
Another possible fix would be to have those files installed in
/opt/local/lib/cmake/fmtX
instead of/opt/local/lib/libfmtX/cmake/fmt
Thanks for sharing the project link. And I'll also run some tests with your suggested approach, to see what the result is.
Regardless, we certainly want to try to accommodate you if possible. More to follow, once I've done more testing/digging.
comment:9 Changed 2 years ago by Lord-Kamina (Gregorio Litenstein)
Replying to mascguy:
Replying to Lord-Kamina:
Another possible fix would be to have those files installed in
/opt/local/lib/cmake/fmtX
instead of/opt/local/lib/libfmtX/cmake/fmt
Thanks for sharing the project link. And I'll also run some tests with your suggested approach, to see what the result is.
Regardless, we certainly want to try to accommodate you if possible. More to follow, once I've done more testing/digging.
Thank you!
Of course, I'm available to help eventually so we can find the best way to solve it.
Doing
sudo ln -sf /opt/local/lib/libfmt9/cmake/fmt/ /opt/local/lib/cmake/
works around the issue for me. Maybe this is a job forport select
?