#! /bin/sh

# uses sed, grep

targetfile=build-outputs.mk

get_platform ( ) {
	echo unix
}

platform=`get_platform`

build_dirx=`cat build.conf.paths | sed "s,{platform},$platform,g"`

for i in $build_dirx; do build_dirs="$build_dirs $i"; done

headerx=`cat build.conf.headers | sed "s,{platform},$platform,g"`

for i in $headerx; do headers="$headers $i"; done

# compile list of existing header files in the source distribution
# assign full path to legal_header_[NORMALIZED BASENAME]

orig="`pwd`"
(for fname in $headers; do
	cd $fname

	for i in *.h; do
		header_list="$header_list $fname$i"

		echo "legal_header_$i=\\"
		echo \'$fname$i \'
	done

	cd $orig
done
cat <<X
cat <<X
# DO NOT EDIT. AUTOMATICALLY GENERATED
BUILD_DIRS = $build_dirs
SOURCE_DIRS = \\\$(BUILD_DIRS)
HEADERS = $header_list
X
) | sed '/^legal_header_/ s,[^a-zA-Z0-9_=\\$],,g' > $targetfile.tmp

for path in $build_dirs; do
	files="$files $path/*.c"
done

objects=`echo $files " " | sed 's,\.c\([ ]\),\.lo\1,g'`

echo "OBJECTS = $objects" >> $targetfile.tmp

for fname in $headers; do
	files="$files $fname*.h"
done

# extract include lines from all files
# compile them into a list of references to $legal_header_*
#echo $files

grep '^# *include' $files | 
sed 's,^\([^:]*\):# *include *["<]\(.*\)[">].*$,\1 \2,' | 
(while read file line; do
	if test "$last" != "$file"; then
		echo "$deplist"
		echo "$file:\\"
		deplist=" "
		last=$file
	fi
		
	deplist="$deplist\$legal_header_$line"
done
echo "$deplist"
echo X) |
sed -e '/^ / s,[^a-zA-Z0-9_ $],,g' \
-e '/^[a-z]/ s,^\([a-z][^:]*\).c:,\1.lo: \1.c .make.dirs,' \
>> $targetfile.tmp

# one "eval" instead of many saves a lot of time.

. $targetfile.tmp > $targetfile

cat >> $targetfile <<X
.make.dirs: \$(srcdir)/build-outputs.mk
	@\$(srcdir)/build/mkdir.sh \$(BUILD_DIRS)
	@echo > \$@
X

rm -f $targetfile.tmp
