Bug 489827

Summary: Spurious automatic dependency on Poppler "Core" requires rebuild each time Poppler breaks ABI
Product: [Frameworks and Libraries] extra-cmake-modules Reporter: RJVB <rjvbertin>
Component: generalAssignee: ecm-bugs-null <ecm-bugs-null>
Status: REPORTED ---    
Severity: wishlist    
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Compiled Sources   
OS: All   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description RJVB 2024-07-06 12:04:45 UTC
***
If you're not sure this is actually a bug, instead post about it at https://discuss.kde.org

If you're reporting a crash, attach a backtrace with debug symbols; see https://community.kde.org/Guidelines_and_HOWTOs/Debugging/How_to_create_useful_crash_reports
***

SUMMARY
Poppler has a habit of breaking ABI in its core library even for minor version updates like 24.01.0 to 24.04.0 . In my experience code that only uses the Qt4 or Qt5 interface libraries is not affected by such breakage as the interface API and ABI have proven to be as stable as the `SOVERSION` of libpoppler-qt? promises.

ECM's FindPoppler module adds a dependency on Poppler's "Core" module however, which is still unnecessary as of Poppler 24.04.0 but causes binaries to have a hard dependency on the presence of a specific libpoppler version in addition to the actually required libpoppler-qt? file. As a result, these binaries often fail to load after a Poppler upgrade and need to be rebuilt.

This puts an unnecessary burden on package maintainers and users like me who build everything themselves.

STEPS TO REPRODUCE
1. Build and install the KFileMetadata and/or Okular from source (also tested with Kile and Tellico)
2. Upgrade Poppler to a version with a different libpoppler.so SOVERSION (e.g. 24.01.0 to 24.04.0)
3. Try to use the KFMD framework or opening a PDF file in Okular

OBSERVED RESULT
Failure at step 3 because of a missing libpoppler.x.so file (with x=133 in the example above)

EXPECTED RESULT
The dependent software should continue to function.

SOFTWARE/OS VERSIONS
Observed on Mac and Linux with various Qt5 versions (this is not a new phenomenon for me).

ADDITIONAL INFORMATION
Using `patchelf --remove-needed` to remove the spurious dependency on libpoppler.133.so fixes the problem. After rebuilding I can still remove the dependency on libpoppler.136.so without breaking functionality. I tried modifying the Kile and Tellico build systems to they only link to libpoppler-qt5.so and this breaks neither the build nor the functionality of the applications.

I long had comments in my build scripts for some poppler dependents ago that rebuilding isn't required after a Poppler upgrade because the code only links to the stable libpoppler-qt5 library.

Submitting this as a wishlist item because the FindPoppler module was introduced  with this "feature" and dropping the automatic dependency may require some work for applications that do depend on Poppler's main library.