#!/bin/bash

# TP shell
#
# Question II - 1
# 
# Antoine Miné
# 26/01/2007

# vérifie qu'un argument est bien spécifié en ligne de commande
if test $# -ne 1
then
    # envoie un message sur la sortie d'erreur et quitte
    echo "$0: attend un argument" >&2
    exit 1
fi

# si CC n'est pas défini, on choisit cc comme compilateur par défaut
if test "x$CC" = "x"
then
    CC=cc
fi

# répertoires standard de bibliothèques, selon le système et le compilateur
syst=`uname`-$CC
case $syst in
    SunOS-cc)
	echo "compilateur: SunOS cc"
	# valeurs codées en dur
	DIRS="/opt/SUNWspro/prod/lib /usr/ccs/lib /usr/lib"
	;;
    *-gcc | Linux*)
	echo "compilateur: gcc"
	# lit la configuration du compilateur (gcc)
	# séléctionne la ligne
	DIRS=`gcc -print-search-dirs | grep libraries | sed -e 's/libraries: =//g' -e 's/:/ /g'`
	;;
    *)
	# envoie un message sur la sortie d'erreur et quitte
	echo "$0: système d'exploitation / compilateur $syst inconnu!" >&2
	exit 1
	;;
esac


# recherche de l'objet
for dir in $DIRS
do
    for file in $dir/*.a $dir/*.so
    do
	# on cherche dans les tables de symboles (-t)
        # et de symboles dynamiques (-T)
	# une ligne contenant le mot .text (1er grep)
	# et le symbole, précédé d'un espace et en fin de ligne (2ème grep)
	# sans polluer l'écran (redirection vers /dev/null)
	if (objdump -t -T "$file" | grep '\.text' | grep " $1\$") 2>/dev/null >/dev/null
	then
	    echo "$file"
	fi
    done
done
