Thomas Bächler wrote:
Allan McRae schrieb:
Don't use ldd here, as it also covers indirect dependencies. If libA
depends on libB and libB depends on libC, then only libB needs
updating when libC changes the SOname, as long as libA never calls
libC directly.
You should parse the output of readelf -d, which only shows direct
dependencies and thus allows you to distinguish between direct and
indirect dependencies ... at least as far as I understand it.
That does not matter when done in a very minimal chroot as directed
at the top of the script. If libA depends on libB and libB depends
on libC, and libB is not on the system, then "ldd libC" does not show
libA.
You're looking at this the wrong way: You want to know whether libA
needs a rebuild because of the libC SONAME bump. So, you install libA
and all its dependencies (libB and libC). Now ldd libA.so shows that
it depends on libC (but the truth is that only libB requires libC, but
libA does not), while readelf tells you libA does NOT need libC.
Even better, you don't need to install all dependencies!
This is the point of this comment:
# Run in minimal chroot to avoid false positives due to dependencies.
# Chroot can be built with:
# sudo mkarchroot <chrootdir>/root glibc coreutils findutils grep tar gzip
So, in your example, if you are testing if libA needs a rebuild due to
libC, you only extract libA in your chroot, not libB. The ldd can not
chain its way to libC. So ti ends up doing the same thing as readelf.
Allan