Skip to content

Option to use compiled fmt library#5231

Open
ssh4net wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
ssh4net:fix/fmt
Open

Option to use compiled fmt library#5231
ssh4net wants to merge 1 commit into
AcademySoftwareFoundation:mainfrom
ssh4net:fix/fmt

Conversation

@ssh4net

@ssh4net ssh4net commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

Description

OpenImageIO uses the fmt library, but spdlog is also quite common and uses the fmt library. This fix should allow to use precompiled fmt library in both spdlog and oiio if they are used in same project.

Added OIIO_USE_COMPILED_FMT CMake option to allow linking against a compiled fmt (fmt::fmt) instead of the header-only variant.
Update externalpackages.cmake to expose the option, select the appropriate fmt target and include dir, and pass the value into generated headers via oiioversion.h.
Adjust Config.cmake.in to avoid forcing find_dependency(fmt) when header-only behavior is overridden. Modify detail/fmt.h to skip defining FMT_HEADER_ONLY when compiled fmt is used, and update libutil CMakeLists and ustring.cpp to link/use the compiled fmt target and use fmt::runtime for dynamic format strings.

Checklist:

  • I have read the guidelines on contributions and code review procedures.
  • I have read the Policy on AI Coding Assistants
    and if I used AI coding assistants, I have an Assisted-by: Codex 5.5 ExtraHigh.
  • I have updated the documentation if my PR adds features or changes
    behavior.
  • I am sure that this PR's changes are tested in the testsuite.
  • I have run and passed the testsuite in CI before submitting the
    PR, by pushing the changes to my fork and seeing that the automated CI
    passed there. (Exceptions: If most tests pass and you can't figure out why
    the remaining ones fail, it's ok to submit the PR and ask for help. Or if
    any failures seem entirely unrelated to your change; sometimes things break
    on the GitHub runners.)
  • My code follows the prevailing code style of this project and I
    fixed any problems reported by the clang-format CI test.
  • If I added or modified a public C++ API call, I have also amended the
    corresponding Python bindings. If altering ImageBufAlgo functions, I also
    exposed the new functionality as oiiotool options.

Introduce OIIO_USE_COMPILED_FMT CMake option to allow linking against a compiled fmt (fmt::fmt) instead of the header-only variant. Update externalpackages.cmake to expose the option, select the appropriate fmt target and include dir, and pass the value into generated headers via oiioversion.h. Adjust Config.cmake.in to avoid forcing find_dependency(fmt) when header-only behavior is overridden. Modify detail/fmt.h to skip defining FMT_HEADER_ONLY when compiled fmt is used, and update libutil CMakeLists and ustring.cpp to link/use the compiled fmt target and use fmt::runtime for dynamic format strings.

Signed-off-by: Vlad <shaamaan@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant