#!/bin/sh # $Id: elf-needed,v 1.5 2013/12/30 05:58:35 friedman Exp $ # Like `ldd', but just print the immediate shared library dependency names # of the specified elf object. `ldd' does a recursive traversal of the # object and all its dependencies' dependencies, and prints out the full # list of dependencies and their resolved filesystem path. needed() { readelf=${READELF-readelf} readelf -d "$1" \ | sed -e '/RUNPATH/{s/.*runpath: \[\(.*\)\]/RUNPATH=\1/p;}' \ -e '/RPATH/{s/.*rpath: \[\(.*\)\]/RPATH=\1/p;}' \ -e '/SONAME/{s/.*soname: \[\(.*\)\]/SONAME=\1/p;}' \ -e '/NEEDED/!d' \ -e 's/^.*NEEDED.*Shared library: *//' \ -e 's/\[\(.*\)\]/\1/' } main() { case $# in 0 ) echo "Usage: $0 [files ...]" 1>&2 exit 1 ;; 1 ) needed "$1" ;; * ) for f in ${1+"$@"}; do echo "$f:" needed "$f" | sed -e 's/^/ /' echo done ;; esac } main ${1+"$@"} # eof