CMake broke with latest stable update

I posted this on the Stable Updates announcement thread:

https://forum.manjaro.org/t/stable-update-2023-06-04-kernels-gnome-44-1-plasma-5-27-5-python-3-11-toolchain-firefox/141610/256

But it might be better suited to Support than to Announcements.

Reporting breakage to CMake as a result of this stable update.

When compiling a well-used project from source, this new error showed up.

/usr/bin/ld: /usr/local/lib/libfmt.a(format.cc.o): warning: relocation against `_ZTIN3fmt3v1012format_errorE' in read-only section `.text.unlikely'
/usr/bin/ld: /usr/local/lib/libfmt.a(format.cc.o): relocation R_X86_64_PC32 against symbol `stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value

Adding -fPIC to the project’s build flags did not solve it.

It turns out that the new file /usr/local/lib/libfmt.a was added only on Jun 5, at the same time as the latest update to Manjaro stable.

Renaming /usr/local/lib/libfmt.a to /usr/local/lib/old_libfmt.a_old caused CMake to issue this error:

CMake Error at /usr/local/lib/cmake/fmt/fmt-targets.cmake:94 (message):
  The imported target "fmt::fmt" references the file

     "/usr/local/lib/libfmt.a"

  but this file does not exist.  Possible reasons include:

  * The file was deleted, renamed, or moved to another location.

  * An install or uninstall procedure did not complete successfully.

  * The installation package was faulty and contained

     "/usr/local/lib/cmake/fmt/fmt-targets.cmake"

  but not all the files it references.

This is likely a mistake with CMake, or in how it was packaged, because there is a perfectly good libfmt.so in /usr/lib:

lrwxrwxrwx   1 root root        11 2023-01-11 08:23 libfmt.so -> libfmt.so.9*
lrwxrwxrwx   1 root root        15 2023-01-11 08:23 libfmt.so.9 -> libfmt.so.9.1.0*
-rwxr-xr-x   1 root root    132968 2023-01-11 08:23 libfmt.so.9.1.0*

and that libfmt.so has worked normally.

Please also note that /usr/lib/cmake contains a lot more than /usr/local/lib/cmake.

Indeed.

How’s that? Packages do not install anything in /usr/local/.

Anything in /usr/local/lib didn’t come from Manjaro. It’s from AUR or somewhere else. I have cmake installed and there is no /usr/local/lib/cmake directory on my system.

Use pacman -Qo /usr/local/lib/libfmt.a to find out which package owns that file.

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.