home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / usr / lib / rpm / find-provides < prev    next >
Text File  |  2006-11-29  |  2KB  |  73 lines

  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. IFS=$'\n'
  6. filelist=($(cat))
  7.  
  8. solist=($(printf "%s\n" "${filelist[@]}" | grep "\\.so" | grep -v "^/lib/ld.so" | \
  9.       tr '\n' '\0' | xargs -0 -r file -L | grep "ELF.*shared object" | \
  10.       cut -d: -f1))
  11. pythonlist=
  12. tcllist=
  13. monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
  14.  
  15. #
  16. # --- Alpha does not mark 64bit dependencies
  17. case `uname -m` in
  18.   alpha*)    mark64=false ;;
  19.   *)        mark64=true ;;
  20. esac
  21.  
  22. #
  23. # --- Library sonames and weak symbol versions (from glibc).
  24. for f in "${solist[@]}"; do
  25.     soname=$(objdump -p "$f" | awk '/SONAME/ {print $2}')
  26.     [ -n "$soname" -a -L "$f" ] && continue
  27.     [ -z "$soname" ] && soname="${f##*/}"
  28.  
  29.     if $mark64 && file -L "$f" 2>/dev/null | grep "ELF 64-bit" >/dev/null; then
  30.     lib64="()(64bit)" slib64="(64bit)"
  31.     else
  32.     lib64= slib64=
  33.     fi
  34.     echo "$soname$lib64"
  35.     objdump -p "$f" | awk '
  36.     BEGIN { START=0 ; }
  37.     /Version definitions:/ { START=1; }
  38.     /^[0-9]/ && (START==1) { print $4; }
  39.     /^$/ { START=0; }
  40.     ' | \
  41.     while read symbol ; do
  42.         echo "$soname($symbol)$slib64"
  43.     done
  44. done | sort -u
  45.  
  46. #
  47. # --- Perl modules.
  48. [ -x /usr/lib/rpm/perl.prov ] &&
  49.     printf "%s\n" "${filelist[@]}" | 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.     printf "%s\n" "${pythonlist[@]}" | /usr/lib/rpm/python.prov | sort -u
  55.  
  56. #
  57. # --- Tcl modules.
  58. [ -x /usr/lib/rpm/tcl.prov -a -n "$tcllist" ] &&
  59.     printf "%s\n" "${tcllist[@]}" | /usr/lib/rpm/tcl.prov | sort -u
  60.  
  61. #
  62. # --- Mono exes/dlls
  63. : ${MONO_PREFIX=/usr}
  64. [ -x $MONO_PREFIX/bin/mono -a -f $MONO_PREFIX/bin/mono-find-provides -a -n "$monolist" ] &&
  65.     printf "%s\n" "${monolist[@]}" | MONO_PATH=$MONO_PREFIX/lib${MONO_PATH:+:$MONO_PATH} prefix=$MONO_PREFIX $MONO_PREFIX/bin/mono-find-provides
  66.  
  67. #
  68. # --- Kernel module exported symbols
  69. [ -x /usr/lib/rpm/find-provides.ksyms ] &&
  70.     printf "%s\n" "${filelist[@]}" | /usr/lib/rpm/find-provides.ksyms "$@"
  71.  
  72. exit 0
  73.