From: Sebastian Zagrodzki Date: Tue, 23 May 2000 17:59:11 +0000 (+0000) Subject: - temporary (until find-requires becomes more flexible) X-Git-Tag: rpm-3_0_4-7~5 X-Git-Url: https://git.pld-linux.org/?a=commitdiff_plain;h=8723ea95c86295e451a1705e54203b4a24220850;p=packages%2Frpm.git - temporary (until find-requires becomes more flexible) Changed files: rpm-find-requires -> 1.1 --- diff --git a/rpm-find-requires b/rpm-find-requires new file mode 100755 index 0000000..135e491 --- /dev/null +++ b/rpm-find-requires @@ -0,0 +1,76 @@ +#!/bin/sh + +# note this works for both a.out and ELF executables +# it also auto-generates requirment lines for shell scripts + +ulimit -c 0 + +filelist=`sed "s/['\"]/\\\&/g"` +for i in /usr/src/examples /usr/local/src/examples /usr/share/doc /usr/local/share/doc; do +filelist=`echo $filelist | sed "s!\<$i[^[:space:]]*[[:space:]]*!!g"` +done +exelist=`echo $filelist | xargs -r file | grep ":.*executable" | cut -d: -f1 ` +elfexelist=`echo $exelist | xargs -r file | egrep ":.* ELF" | cut -d: -f1 ` +aoutexelist=`echo $exelist | xargs -r file | egrep -v ":.* ELF" | cut -d: -f1 ` +scriptlist=`echo $filelist | xargs -r file | egrep ":.* (commands|script) " | cut -d: -f1 ` +liblist=`echo $filelist | xargs -r file | grep ":.*shared object" | cut -d : -f1 ` +elfliblist=`echo $liblist | xargs -r file | egrep ":.* ELF" | cut -d: -f1 ` +aoutliblist=`echo $liblist | xargs -r file | egrep -v ":.* ELF" | cut -d: -f1 ` + +aoutexerequires=`for f in $aoutexelist; do + if [ -x $f ]; then + ldd $f | awk '/=>/ { print $1 }' + fi +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -r -n 1 basename | grep -v 'libNoVersion.so' | sort -u +` + +elfexerequires=`for f in $elfexelist; do + if [ -x $f ]; then + objdump -p $f|awk '/NEEDED/ {print $2}' + fi +done | sed "s/['\"]/\\\&/g" | grep -v 'libNoVersion.so' | sort -u +` + +aoutlibrequires=`for f in $aoutliblist; do + ldd $f | awk '/=>/ { print $1 }' +done | sort -u | sed "s/['\"]/\\\&/g" | xargs -r -n 1 basename | grep -v 'libNoVersion.so' | sort -u +` + +elflibrequires=`for f in $elfliblist; do + objdump -p $f|awk '/NEEDED/ {print $2}' +done | sed "s/['\"]/\\\&/g" | grep -v 'libNoVersion.so' | sort -u +` + +for f in $scriptlist; do + if [ -x $f ]; then + head -1 $f | sed -ne '/^\#\!/p' | sed -e 's/^\#\![ ]*//' | cut -d" " -f1 + fi +done | sort -u + +for f in $liblist $exelist ; do + objdump -p $f | awk ' + BEGIN { START=0; LIBNAME=""; } + /Version References:/ { START=1; } + /required from/ && (START==1) { + sub(/:/, "", $3); + LIBNAME=$3; + } + (START==1) && (LIBNAME!="") && ($4~/^GLIBC_*/) { print LIBNAME "(" $4 ")"; } + /^$/ { START=0; } + ' +done | sort -u +# Generate name of rpm package provides library + + +echo "$aoutexerequires +$elfexerequires +$aoutlibrequires +$elflibrequires" \ + | sort -u + +echo "$aoutexerequires +$elfexerequires +$aoutlibrequires +$elflibrequires" \ + | xargs -r -- rpm -q --whatprovides --qf "%{NAME}\n" 2>/dev/null \ + | sort -u