- #! /bin/sh
- # -*- Mode: Sh -*-
- # checklibs.sh ---
- # Author : Manoj Srivastava ( srivasta@glaurung.internal.golden-gryphon.com )
- # Created On : Fri Sep 29 15:36:22
- # Created On Node : glaurung.internal.golden-gryphon.com
- # Last Modified By : Manoj Srivastava
- # Last Modified On : Fri Sep 29 22:53:27
- # Last Machine Used: glaurung.internal.golden-gryphon.com
- # Update Count : 43
- # Status : Unknown, Use with caution!
- # HISTORY :
- # Description :
- #
- # arch-tag: 8ba11489-77fa-45a0-92c4-9c5b162ee119
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- # Make sure we abort on error
- set -e
- progname="$(basename \"$0\")"
- trap 'rm -f search_patterns.txt;' ALRM HUP INT PIPE TERM ABRT FPE BUS QUIT SEGV ILL EXIT
- # Find all undefined symbols in all ELF objects in this tree
- readelf -s -D -W $(find . -type f -print0 | xargs -0r file | grep " ELF" | \
- awk '{print $1}' | sed -e 's/:$//') | grep UND | grep -v LOCAL |
- perl -ple 's/.*\s(\S+)\s*$/\^$1\$/g' | sort -u > search_patterns.txt;
- # Find all the libraries needed in this tree
- objdump -T --private-headers $(find . -type f -print0 | xargs -0r file | grep " ELF" | \
- awk '{print $1}' | sed -e 's/:$//') | grep NEEDED | sort -u | awk '{print $2}' |
- while read lib; do
- # For each library, see where it lives o the file system
- LIB=
- for library_dir in "/lib" "/usr/lib" $EXTRA_LIBRARY_PATHS; do
- if [ -e "$library_dir/$lib" ]; then
- LIB="$library_dir/$lib";
- break
- fi
- done
- if [ -z "$LIB" ]; then
- echo >&2 "Can't find $lib"
- continue
- fi
- # If we fond the library, find what symbols it defines, and if these symbols
- # are some that we need
- if readelf -s -D -W $LIB | grep -v UND | perl -ple 's/.*\s(\S+)\s*$/$1/g' | \
- sort -u | grep -q -f search_patterns.txt ; then
- # Library provides at least some symbols we need
- if [ -n "$DEBUG" ]; then echo "Found $LIB"; fi
- else
- # Library does not provide any symbols we need
- echo "$LIB" ;
- fi
- done
- # Get rid of the intermediate file
- rm -f search_patterns.txt;
- exit 0
Raw Paste