Description of problem: Running createrepo_c on Fedora Rawhide fails with $SUMMARY. Version-Release number of selected component (if applicable): createrepo_c-0.20.1-4.fc39.x86_64 glib2-2.74.1-3.fc38.x86_64 How reproducible: Always. Steps to Reproduce: 1. createrepo_c --help Actual results: createrepo_c: symbol lookup error: /lib64/libcreaterepo_c.so.0: undefined symbol: g_string_free_and_steal Expected results: No error. Additional info: Updating glib to 2.75.4-2.fc39 fixes the issue, but the createrepo_c-0.20.1-4.fc39 RPM doesn't require that version. I suspect the problem may actually be in glib2, as it probably shouldn't add a new symbol without either bumping soname or using symbol versioning.
The missing symbol is used by libcreaterepo_c.so.0 library from createrepo_c-libs-0.20.1-4.fc39.x86_64: # nm -D /usr/lib64/libcreaterepo_c.so.0 | grep g_string_free_and_steal U g_string_free_and_steal and the symbol is provides by libglib-2.0.so.0 library from glib2-2.76.0-1.fc39.x86_64: # nm -D /usr/lib64/libglib-2.0.so.0 | grep g_string_free_and_steal 000000000007fa70 T g_string_free_and_steal createrepo_c-libs package should constrain a minimal glib2 version to the one which first provided it.
From glib-2.75.3 NEWS: * Add `g_string_free_and_steal()` and use it to warn on unused results from `g_string_free (_, FALSE)` (!3219, !3226, work by Matthias Clasen and Sergey Bugaev) from glib/gstring.h: #define g_string_free(str, free_segment) \ (__builtin_constant_p (free_segment) ? \ ((free_segment) ? \ (g_string_free) ((str), (free_segment)) : \ g_string_free_and_steal (str)) \ : \ (g_string_free) ((str), (free_segment))) The best fix would be glib2 to symbol-version new symbols so that rpm-build automatically picks the dependency. However, because glib2 does not use symbol versioning, I recommend fix it on createrepo_c by adding "Requires: glib2 >= 2.75.3" (if compiled against glib2 > 2.75.3).
This bug appears to have been reported against 'rawhide' during the Fedora Linux 39 development cycle. Changing version to 39.