#!/bin/sh
# Copyright (C) 1991, 1992, 1995, 1997 Free Software Foundation, Inc.
# This file is part of the GNU C Library.

# The GNU C Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.

# The GNU C 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
# Lesser General Public License for more details.

# You should have received a copy of the GNU Lesser General Public
# License along with the GNU C Library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
# 02111-1307 USA.

sysincludedir=${sysincludedir-/usr/include}

if [ ! "$snarfexclude" ]; then
  # Filter out some headers which cause trouble.
  # Reportedly a bug in sunos4.1.2's sed makes this lose if
  # the two cmds are in a single sed invocation.
  snarfexclude="`echo !${sysincludedir}/sys/param.h! \
		      !${sysincludedir}/sys/time.h! \
		      !${sysincludedir}/sys/types.h! \
		 | sed 's,/,\\\\/,g' \
		 | sed 's,!\\([^!]*\\)!,-e /\\1/d,g'`"
fi

for file in $*; do
  sed -n 's/^#define[ 	]*\([A-Z][A-Z0-9_]*\)[ 	][ 	]*[^ 	].*$/\1/p' \
    < $file

  snarfexclude="$snarfexclude \
		`echo $file | sed -e 's,/,\\\\/,g' -e 's,^.*$,-e /&/d,'`"
  export snarfexclude

  included="`sed -n < $file \
		 -e 's,^#include[ 	]*<\(.*\)>.*$,'${sysincludedir}'/\1,p'\
	     | sed $snarfexclude`"
  if [ "$included" ]; then
    $0 $included
  fi
done

exit 0
