| | 1 | #!/bin/bash |
|---|
| | 2 | |
|---|
| | 3 | # This script reads filenames from STDIN and outputs any relevant provides |
|---|
| | 4 | # information that needs to be included in the package. |
|---|
| | 5 | |
|---|
| | 6 | filelist=`sed "s/['\"]/\\\&/g"` |
|---|
| | 7 | |
|---|
| | 8 | solist=$(echo $filelist | grep "\\.so" | grep -v "^/lib/ld.so" | \ |
|---|
| | 9 | xargs file -L 2>/dev/null | grep "ELF.*shared object" | cut -d: -f1) |
|---|
| | 10 | pythonlist= |
|---|
| | 11 | tcllist= |
|---|
| | 12 | |
|---|
| | 13 | # |
|---|
| | 14 | # --- Alpha does not mark 64bit dependencies |
|---|
| | 15 | case `uname -m` in |
|---|
| | 16 | alpha*) mark64="" ;; |
|---|
| | 17 | *) mark64="()(64bit)" ;; |
|---|
| | 18 | esac |
|---|
| | 19 | |
|---|
| | 20 | # |
|---|
| | 21 | # --- Library sonames and weak symbol versions (from glibc). |
|---|
| | 22 | for f in $solist; do |
|---|
| | 23 | soname=$(objdump -p $f | awk '/SONAME/ {print $2}') |
|---|
| | 24 | |
|---|
| | 25 | lib64=`if file -L $f 2>/dev/null | \ |
|---|
| | 26 | grep "ELF 64-bit" >/dev/null; then echo "$mark64"; fi` |
|---|
| | 27 | if [ "$soname" != "" ]; then |
|---|
| | 28 | if [ ! -L $f ]; then |
|---|
| | 29 | echo $soname$lib64 |
|---|
| | 30 | objdump -p $f | awk ' |
|---|
| | 31 | BEGIN { START=0 ; } |
|---|
| | 32 | /Version definitions:/ { START=1; } |
|---|
| | 33 | /^[0-9]/ && (START==1) { print $4; } |
|---|
| | 34 | /^$/ { START=0; } |
|---|
| | 35 | ' | \ |
|---|
| | 36 | grep -v $soname | \ |
|---|
| | 37 | while read symbol ; do |
|---|
| | 38 | echo "$soname($symbol)`echo $lib64 | sed 's/()//'`" |
|---|
| | 39 | done |
|---|
| | 40 | fi |
|---|
| | 41 | else |
|---|
| | 42 | echo ${f##*/}$lib64 |
|---|
| | 43 | fi |
|---|
| | 44 | done | sort -u |
|---|
| | 45 | |
|---|
| | 46 | # |
|---|
| | 47 | # --- Perl modules. |
|---|
| | 48 | [ -x /usr/lib/rpm/perl.prov ] && |
|---|
| | 49 | echo $filelist | tr '[:blank:]' \\n | grep '\.pm$' | /usr/lib/rpm/perl.prov | sort -u |
|---|
| | 50 | |
|---|
| | 51 | # |
|---|
| | 52 | # --- Python modules. |
|---|
| | 53 | [ -x /usr/lib/rpm/python.prov -a -n "$pythonlist" ] && |
|---|
| | 54 | echo $pythonlist | tr '[:blank:]' \\n | /usr/lib/rpm/python.prov | sort -u |
|---|
| | 55 | |
|---|
| | 56 | # |
|---|
| | 57 | # --- Tcl modules. |
|---|
| | 58 | [ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] && |
|---|
| | 59 | echo $tcllist | tr '[:blank:]' \\n | /usr/lib/rpm/tcl.prov | sort -u |
|---|
| | 60 | |
|---|
| | 61 | exit 0 |