#!/bin/sh

# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
#
# This file is part of the GNU ISO C++ Library.  This library 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, or (at your option)
# any later version.
#
# This library 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 library; see the file COPYING.  If not, write to the Free
# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
#
# As a special exception, you may use this file as part of a free software
# library without restriction.  Specifically, if other files instantiate
# templates or use macros or inline functions from this file, or you compile
# this file and link it with other files to produce an executable, this
# file does not by itself cause the resulting executable to be covered by
# the GNU General Public License.  This exception does not however
# invalidate any other reasons why the executable file might be covered by
# the GNU General Public License.


if test ${#} -lt 2 || test $1 = '--help'; then
  echo "Usage:  extract_symvers  shared_lib output_file" 1>&2
  exit 1
fi

lib=$1
output=$2

# GNU binutils, somewhere after version 2.11.2, requires -W/--wide to avoid
# default line truncation.  -W is not supported and truncation did not occur
# by default before that point.
readelf="readelf --symbols"
if readelf --help | grep -- --wide > /dev/null; then
    readelf="$readelf --wide"
fi

# This avoids weird sorting problems later.
LC_ALL=C
export LC_ALL
LANG=C
export LANG

tmp=extract.$$

${readelf} ${lib} | sed '/\.dynsym/,/^$/p;d' | egrep -v ' (LOCAL|UND) ' |\
awk '{ if ($4 == "FUNC" || $4 == "NOTYPE")
         printf "%s:%s\n", $4, $8;
       else if ($4 == "OBJECT")
         printf "%s:%s:%s\n", $4, $3, $8;
     }' | sort | uniq > $tmp 2>&1
#       else printf "Huh?  What is %s?\n", $8;


# I think we'll be doing some more with this file, but for now, dump.
mv $tmp $output

exit 0
