#! /bin/sh

# by Alexandre Oliva <oliva@dcc.unicamp.br>
# updated by Edouard G. Parmelan <egp@free.fr>

# This script can be used to update the list of class files to
# compiled into Klasses.jar and included in the Kaffe distribution.
# Whenever you add or remove a file, run this script from within
# kaffe-src/libraries/javalib

if test -f Makefile.am &&
   classfile=`sed -n '/^CLASSFILE *= */ s///p' < Makefile.am` &&
   SRCDIRS=`sed -n '/^SRCDIRS *= */ s///p' < Makefile.am` &&
   classSRCS=Klasses_jar_SRCS &&
   grep "^$classSRCS *=" < Makefile.am > /dev/null; then :
else
    echo update-class-list must be run from within a javalib directory >&2
    exit 1
fi

trap 'rm -f classlist omit_filter pkglist macrodef; exit 1' 1 2 15

omitted_packages="\
java/awt/win32 \
"

echo WARNING: Omitting $omitted_packages packages from the list of packages
find $SRCDIRS -name \*.java -print | sort > classlist


for pkg in $omitted_packages; do
  echo "$pkg"
done | sed 's,/,\\/,g;s,^,/^,;s,$,$/d,' > omit_filter

sed 's,/[^/]*$,,' < classlist | uniq | sed -f omit_filter > pkglist

{
  sed 's,^,	$(,;s,$,_SRCS) \\,;$s, \\$,,;s,[-/],_,g' < pkglist

  while read pkg; do
    echo "${pkg}_SRCS = \\" | sed 's,[-/],_,g'
    grep "^${pkg}/[^/]*$" < classlist | sed 's/^/	/;s/$/ \\/;$s/ \\$//'
  done < pkglist
} > macrodef


for pkg in $omitted_packages; do
  echo "$pkg"
done | sed 's,/,\\/,g;s,^,/^,;s,$,$/p,' > omit_filter

sed 's,/[^/]*$,,' < classlist | uniq | sed -n -f omit_filter > pkglist

{
  echo "OMITTED_PACKAGES_SRCS = \\"
  sed 's,^,	$(,;s,$,_SRCS) \\,;$s, \\$,,;s,[-/],_,g' < pkglist

  while read pkg; do
    echo "${pkg}_SRCS = \\" | sed 's,[-/],_,g'
    grep "^${pkg}/[^/]*$" < classlist | sed 's/^/	/;s/$/ \\/;$s/ \\$//'
  done < pkglist
  echo
} >> macrodef

rm -f classlist omit_filter pkglist

sed '
/^'"$classSRCS"'/ {
    p
    r macrodef
}
/^'"$classSRCS"'/,/^$/ d
' < Makefile.am > Makefile.am.new

rm -f macrodef Makefile.am.bak

mv Makefile.am Makefile.am.bak
mv Makefile.am.new Makefile.am

# rm -f Makefile.am.bak

exit 0
